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


134

Как лучше всего проверить, содержит ли строка только пробелы?

Строка может содержать символы, объединенные с пробелами, но не только пробелы.

Ответы:


294

Вместо того, чтобы проверять всю строку, чтобы увидеть, есть ли только пробелы, просто проверьте, есть ли хотя бы один символ без пробелов:

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

7
Просто будьте осторожны с myString, чтобы оно было нулевым. Он вернет истину: /\S/.test(null) == true
Дилшод Таджибаев

6
во многих из этих ответов есть регулярное выражение! Означает ли это, что в js нет собственного способа обнаружить что-то? нет string.IsWhitespace или что-то в этом роде? Родной обрезки тоже нет?
JonnyRaa

4
@JonnyLeeds Поскольку регулярное выражение даже имеет поддержку синтаксиса в 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
Работает также для новой строки и табуляции, тогда как приведенные выше примеры регулярных выражений не работают, поскольку они ищут только отсутствие чего-либо, кроме пробелов. Хотя я уверен, что кто-то с некоторыми знаниями регулярных выражений может создать регулярное выражение, которое также будет включать табуляцию / новую строку в поиск.
Кейт

не работает, когда val назначены пробелы, в моем случае четыре пробела.
user1451111 02

7

Просто проверьте строку на это регулярное выражение:

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

1
То, как я читаю вопрос, гласит, что / any / whitespace разрешено, если строка не / only / whitespace. В нем ничего не говорится о том, что делать, если строка пуста, поэтому, возможно, ответ nickf еще лучше.
Ян Клелланд


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", он вернет true. Пример: return " asdfv34562345" < "\u0020" + 1;оценивается как истина.
Дерек Зиемба
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.