Як виявити рядок, який містить лише пробіли?


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

Найшвидшим рішенням буде використання тесту функції прототипу регулярного виразу () та пошук будь-якого символу, який не є пробілом або розривом рядка \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!');
}

Детальніше про обробку можна прочитати тут .


2
Ця відповідь мені найбільше подобається. Дуже гладка. 👍
GTS Джо

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.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

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

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

Ви також можете використовувати цей метод для видалення пробілів на початку та в кінці рядка, тобто

"  hello  ".trim(); // Result will be "hello"

4
Розширення прототипів вбудованих об’єктів - погана ідея.
sbichenko

@exizt: а якщо це буде використовуватися лише його власним кодом?
Шехзад,

0

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

var text = "  ";
if($.trim(text.length == 0){
  console.log("Text is empty");
}
else
{
  console.log("Text is not empty");
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.