2016-01-29 3 views
0

Мне нужно вернуть true, если строка содержит либо ничего, либо просто пробелы, иначе false.Как проверить, содержит ли строка ни ничего, ни просто пробелы?

var str = "";  // true 
var str = " "; // true 
var str = " 1 "; // false 
var str = " s "; // false 

Как я могу это сделать?

Я пробовал использовать /^\s*?$/.

+0

Какой код вы пробовали? –

+0

@AdamKonieska '/^\ s *? $ /' – stack

ответ

1
/^ *$/ 
  • ^ - с самого начала
  • $ - сезам конец
  • * - строка состоит из ноль или более пространств

See it in action

+0

@ndn Не '' \ t'' пустые или юникодные пробелы? – andlrc

+0

@ dev-null, в комментариях, OP заявил, что он пытался использовать '\ s' и не получил желаемых результатов. Имея это в виду и отсутствие отрицательной обратной связи на его стороне, разумно предположить, что когда он говорит * пробелы *, он ** буквально ** означает * пробелы *. Поэтому, чтобы ответить на ваш вопрос - нет, * вкладка * не является * пространством *. – ndn

+0

@ndn Вы правы ... Только для моей информации, пожалуйста, скажите мне, как я могу добавить * tab * в это регулярное выражение? – stack

1

Я бы заменил пространства ничем и посмотрел, какая длина.

var strTest = str.replace(" ",""); 
if(strTest.length == 0) {dowork();} 

если строка все пробелы, то длина будет 0.

+0

'if (string.length = 0)' всегда 0. –

+0

как вы думаете, он всегда будет 0? Если str = "this" - тогда длина должна быть 4 – Nefariis

+0

Потому что его оператор присваивания '=', а не сравнение '=='. –

1

Вы также можете сделать:

if (!str || !str.replace(/ /g, "")) { 
    // str is either empty, null, undefined or has nothing in it other than spaces 
} 

Это также защищает Вас, если str является null или undefined тоже.

Вот демо с помощью тестовых ор в:

var testStrings = ["", " ", " 1 ", " s "]; 
 

 
testStrings.forEach(function(str) { 
 
    var result = false; 
 
    if (!str || !str.replace(/ /g, "")) { 
 
    // str is either empty, null, undefined or has nothing in it other than spaces 
 
    result = true; 
 
    } 
 
    log('"' + str + '"' + " tests as " + result + "<br>"); 
 
}); 
 

 
function log(x) { 
 
    var r = document.getElementById("results"); 
 
    var div = document.createElement("div"); 
 
    div.innerHTML = x; 
 
    r.appendChild(div); 
 
}
<pre id="results"></pre>

+0

Регулярное выражение будет возвращать true, если есть пробелы, вам нужно '^' и '$' соответствовать требованию OP для соответствия строк, состоящих из только пробелов. –

+0

@AdamKonieska - Я не думаю, что вы понимаете, что это делает. Я использую '.replace()', поэтому все, что будет оставлено, это непространственные символы в строке, и это просто тесты - это то, что строка непространственных символов пуста. – jfriend00

+0

@ jfriend00 ты прав. Я получил в голове, что OP хочет, чтобы '' '' был ложным при тестировании. –

Смежные вопросы