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

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

Например - 'Chicago Heights, IL' будет действительным, но если пользователь просто попадет в пробел любое количество раз и нажмите Enter, форма не будет проверяться. Предваряя проверку, я попытался запустить if (foo != null), а затем запустить регулярное выражение, но попадание в пробел по-прежнему регистрирует символы, так что это не работает. Вот что я сейчас использую, что позволяет использовать пробелы:

^[-a-zA-Z0-9_:,.' ']{1,100}$

Ответ 1

Я не уверен, что вам нужен RegEx здесь. Почему бы просто не называть ваш язык Trim(), а затем гарантировать, что результирующая строка не пуста?

Ответ 2

Это очень просто: .*\S.*

Для этого требуется один непространственный символ в любом месте. Синтаксис регулярного выражения предназначен для регулярных выражений, совместимых с Perl 5, если у вас есть другой язык, синтаксис может немного отличаться.

Ответ 3

Вы можете использовать простой:

^(?=.*\S).+$

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

Посмотрите на rubular.

Ответ 4

Следующее ответит на ваш вопрос, как написано, но см. мою дополнительную заметку:

^(?!\s*$)[-a-zA-Z0-9_:,.' ']{1,100}$

Объяснение: (?!\s*$) - это негативный просмотр. Это означает: "Следующие символы не могут соответствовать подшаблону \s*$". Когда вы принимаете подшаблон во внимание, это означает: "Следующие символы не могут быть ни пустой строкой, ни строкой пробела до конца, поэтому после этой точки в ней должен быть по крайней мере один символ без пробелов Струна." Если у вас есть это правило, вы можете разрешить пробелы в своем классе символов.

Замечание: Я не думаю, что ваш ' ' делает то, что вы намереваетесь. Похоже, вы пытались представить символ пробела, но регулярное выражение интерпретирует ' как буквальный апостроф. Внутри класса символов ' ' будет означать "соответствовать любому символу, который является либо ', пробельным символом, либо '" (обратите внимание, что второй символ ' является избыточным). Я подозреваю, что вам больше нравится:

^(?!\s*$)[-a-zA-Z0-9_:,.\s]{1,100}$

Ответ 5

Если мы хотим применить проверки только с разрешенным набором символов, я попытался с помощью USERNAME_REGEX = /^(?:\s*[.\-_]*[a-zA-Z0-9]{1,}[.\-_]*\s*)$/;

  • Строка может содержать любое количество пробелов в начале или в конце или в промежутке, но будет содержать хотя бы один буквенно-цифровой символ.
  • Также допускаются необязательные символы ., _ , -, но строка должна иметь один буквенно-цифровой символ.

Ответ 6

Попробуйте это регулярное выражение:

^[^\s]+(\s.*)?$

Это означает один или несколько символов, которые не являются пробелами, а затем, необязательно, пробелом, за которым следует что-либо.

Ответ 7

Просто используйте \s*, чтобы избежать одного или нескольких пробелов в регулярном выражении между двумя словами.

Например, "Mozilla/ 4.75" и "Mozilla/4.75" оба могут быть сопоставлены следующим регулярным выражением:

[A-Z][a-z]*/\s*[0-9]\.[0-9]{1,2}

Добавление \s* соответствует нулю, одно или несколько пробелов между двумя словами.