Регулярное выражение, которое допускает пробелы в строке, но не только пробелы - PullRequest
13 голосов
/ 08 апреля 2011

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

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

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

Ответы [ 6 ]

35 голосов
/ 08 апреля 2011

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

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

7 голосов
/ 09 апреля 2011

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

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

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

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

^(?!\s*$)[-a-zA-Z0-9_:,.\s]{1,100}$
4 голосов
/ 09 апреля 2011

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

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

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

Смотри на Рубуляр .

0 голосов
/ 14 июня 2017

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

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

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

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

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

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

0 голосов
/ 08 апреля 2011

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

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

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

...