Як я можу перевірити, чи рядок містить символи та пробіли, а не просто пробіли?


134

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

Рядок може містити символи, поєднані з пробілом, але не лише пробіл.

Відповіді:


294

Замість того , щоб перевіряти всю рядок , щоб побачити , якщо є тільки прогалини, просто перевірити, якщо є принаймні один символ , НЕ пробілами:

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

7
Просто будьте обережні з myString, щоб це було нульовим значенням. Це повернеться правдою: /\S/.test(null) == true
Dilshod Tadjibaev

6
дуже багато цих відповідей в них регулярно виражені! Це означає, що в js немає рідного способу виявити річ? чи немає string.IsWhitespace чи щось таке? Немає і рідного оздоблення?
JonnyRaa

4
@JonnyLeeds Оскільки у regex навіть є підтримка синтаксису в js, можна сказати, що він насправді більш рідний, ніж будь-які відвантажені корисні методи;)
Рікардо ван ден Брок

38

Найпростіша відповідь, якщо ваш браузер підтримує цю trim()функцію

if (myString && !myString.trim()) {
    //First condition to check if string is not empty
    //Second condition checks if string contains just whitespace
}

На сьогоднішній день, коли IE 8 є RIP, це найчистіше і найефективніше рішення продуктивності, що покладається на нативну реалізацію. І це правильно працює з вкладками та новими рядками.
Олександр Абакумов

35
if (/^\s+$/.test(myString))
{
      //string contains only whitespace
}

це перевіряє наявність 1 або більше символів пробілу, якщо ви його також збігаєте з порожнім рядком, то замініть +на *.


18

Що ж, якщо ви використовуєте jQuery, це простіше.

if ($.trim(val).length === 0){
   // string is invalid
} 

1
Працює і для нового рядка, і для вкладки, тоді як наведені вище приклади регулярних виразів не так шукають лише відсутність простого простору. Хоча, я впевнений, що хтось із деякими знаннями з регулярних виразів може створити регулярний вираз, який також міститиме вкладку / новий рядок у пошуку.
Кейт

не працює, коли валу призначено пробіли, в моєму випадку чотири пробіли.
user1451111

7

Просто перевірте рядок із цим регулярним виразом:

if(mystring.match(/^\s+$/) === null) {
    alert("String is good");
} else {
    alert("String contains only whitespace");
}

1
Те, як я читаю питання, говорить про те, що / будь-який / пробіл дозволений, поки рядок не / лише / пробіл. Він мовчить про те, що робити, якщо рядок порожній, тож, можливо, відповідь нікфа все ж краще.
Ian Clelland


0

Регулярний вираз, який я в кінцевому підсумку використовував, коли я хочу дозволити пробіли посередині рядка, але не на початку чи в кінці, було таке:

[\S]+(\s[\S]+)*

або

^[\S]+(\s[\S]+)*$

Отже, я знаю, що це старе питання, але ви можете зробити щось на кшталт:

if (/^\s+$/.test(myString)) {
    //string contains characters and white spaces
}

або ви можете робити те, що сказав Nickf, і використовувати:

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

0

Я використовував наступний метод, щоб визначити, чи рядок містить лише пробіли. Він також відповідає порожнім рядкам.

if (/^\s*$/.test(myStr)) {
  // the string contains only whitespace
}

0

Це може бути швидким рішенням

return input < "\u0020" + 1;

Це просто те, return input < " 1"; що просто робить алфавітне порівняння. Поки вхід буде відсортований нижче "1", він повернеться істинним. Приклад: return " asdfv34562345" < "\u0020" + 1;оцінюється до істини.
Дерек Земба
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.