Как определить строку, содержащую только пробелы?

83

Длина строки, содержащей один пробел, всегда равна 1:

alert('My str length: ' + str.length);

Пробел - это символ, поэтому:

str = "   ";
alert('My str length:' + str.length); // My str length: 3

Как отличить пустую строку от строки, содержащей только пробелы? Как определить строку, содержащую только пробелы?

Лука
источник
1
Обрежьте его и убедитесь, что длина равна нулю. Вы используете jQuery?
Четтер Хаммин
2
Удалите все пробелы и посмотрите, равна ли длина строки 0? Или используйте регулярное выражение для сопоставления только строк с пробелами ...
Феликс Клинг,

Ответы:

154

Для этого вы можете использовать регулярное выражение, чтобы удалить все пробелы в строке. Если длина результирующей строки равна 0, то вы можете быть уверены, что оригинал содержит только пробелы. Попробуй это:

var str = "    ";
if (!str.replace(/\s/g, '').length) {
  console.log('string only contains whitespace (ie. spaces, tabs or line breaks)');
}

Рори МакКроссан
источник
1
Ну, строка содержит только пробелы.
dwerner
50

Самым быстрым решением было бы использовать функцию test () прототипа регулярного выражения и искать любой символ, который не является пробелом или разрывом строки \S:

if (/\S/.test(str))
{
    // found something other than a space or line break
}

Если у вас очень длинная струна, это может иметь большое значение.

пмротула
источник
15

Подобно ответу Рори, с ECMA 5 теперь вы можете просто позвонить, str.trim().lengthа не использовать регулярное выражение. Если результирующее значение равно 0, значит, у вас есть строка, содержащая только пробелы.

if (!str.trim().length) {
  console.log('str is empty!');
}

Вы можете узнать больше об обрезке здесь .

bobbyg603
источник
2
Мне больше всего нравится этот ответ. Очень красиво. 👍
GTS Joe
3
Это самое элегантное решение.
Gefilte Fish
11
if(!str.trim()){
  console.log('string is empty or only contains spaces');
}

Удаление пробелов из строки можно выполнить с помощью String#trim().

Чтобы проверить, является ли строка нулевой или неопределенной, можно проверить, является ли сама строка ложной, и в этом случае она является нулевой, неопределенной или пустой строкой. Это первая проверка необходима, как попытка вызывать методы nullили undefinedприведет к ошибке. Чтобы проверить, содержит ли он только пробелы, можно проверить, является ли строка ложной после обрезки, что означает, что в этой точке это пустая строка.

if(!str || !str.trim()){
   //str is null, undefined, or contains only spaces
}

Это можно упростить с помощью необязательного оператора цепочки .

if(!str?.trim()){
   //str is null, undefined, or contains only spaces
}

Если вы уверены, что переменная будет строкой, необходима только вторая проверка.

if(!str.trim()){
   console.log("str is empty or contains only spaces");
}
йота
источник
8

Вы можете обрезать значение String, создав функцию обрезки для своих строк.

String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

теперь он будет доступен для каждой вашей строки, и вы можете использовать его как

str.trim().length// Result will be 0

Вы также можете использовать этот метод для удаления пробелов в начале и конце строки, т.е.

"  hello  ".trim(); // Result will be "hello"
Шехзад
источник
4
Расширять прототипы встроенных объектов - плохая идея.
сбиченко
@exizt: что, если он будет использоваться только его собственным кодом?
Shehzad
0

Обрежьте значение String, создав функцию обрезки

var text = "  ";
if($.trim(text.length == 0){
  console.log("Text is empty");
}
else
{
  console.log("Text is not empty");
}
user3024615
источник