регулярное выражение для разрешения пробелов между словами
Я хочу, чтобы регулярное выражение, которое предотвращает символов только буквы и цифры. Это регулярное выражение отлично работает, но оно не допускает пробелов между словами.
^[a-zA-Z0-9_]*$
например, при использовании этого регулярного выражения" HelloWorld "отлично, но" Hello World " не соответствует.
Как я могу настроить его, чтобы разрешить пробелы?
14 ответов:
tl; dr
просто добавьте пробел в свой класс персонажа.
^[a-zA-Z0-9_ ]*$
теперь, если вы хотите быть строгой...
вышеизложенное не совсем верно. Из-за того, что
*означает ноль или больше, это соответствовало бы всем следующим случаям, которые обычно не означают совпадения:
- пустую строку "".
- строка, состоящая полностью из пространства." " ,
- строка, которая ведет и / или тропы с пробелами, " Hello World ".
- строка, содержащая несколько пробелов между словами "Hello World".
...используйте @СТЭМа по ответ.
который, в моем вкусе (без использования
\w) переводится как:^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$(пожалуйста, upvote @stema независимо.)
некоторые вещи, чтобы отметить об этом (и @stema) ответ:
если вы хотите разрешить несколько пробелы между словами (скажем, если вы хотите разрешить случайные двойные пробелы, или если вы работаете с копией вставленного текста из PDF), а затем добавить
+после космос:^\w+( +\w+)*$если вы хотите разрешить вкладки и новые строки (пробелы), то замените пробел на
\s+:^\w+(\s+\w+)*$здесь я предлагаю
+по умолчанию, потому что, например, разрывы строк Windows состоят из два пробелы в последовательности,\r\n, так что вам понадобится+, чтобы поймать обоих.все еще не работает?
проверьте, какой диалект регулярного выражения, которые вы используете.* в таких языках, как Java, вам придется избегать ваших обратных косых черт,т. е.
\wи\s. В старых или более основных языках и утилит, таких какsed,\wи\sне определены, поэтому запишите их с помощью классов символов,например[a-zA-Z0-9_]и[\f\n\p\r\t], соответственно.
* я знаю, что этот вопрос помечен vb.net, но, основываясь на 25 000+ просмотров, я предполагаю, что это не только те люди, которые сталкиваются с этим вопросом. В настоящее время это первый хит на google для поисковой фразы, регулярное выражение пробел слово.
одна из возможностей состояла бы в том, чтобы просто добавить пространство в класс символов, как предложил acheong87, это зависит от того, насколько строго вы используете свой шаблон, потому что это также позволит строку, начинающуюся с 5 пробелов, или строки, состоящие только из пробелов.
другая возможность заключается в определении шаблона:
Я буду использовать
\wэто в большинстве регулярных выражений вкусы же, чем[a-zA-Z0-9_](в некоторых он основан на Юникоде)^\w+( \w+)*$это позволит серия хотя бы одно слово и слова разделены пробелами.
^соответствует началу строки
\w+соответствует серии по крайней мере одного символа слова
( \w+)*это группа, которая повторяется 0 или более раз. В группе он ожидает пробел, за которым следует ряд хотя бы одного символа слова
$соответствует концу строки
попробовать с:
^(\w+ ?)*$объяснение:
\w - alias for [a-zA-Z_0-9] "whitespace"? - allow whitespace after word, set is as optional
Я предполагаю, что вы не хотите, чтобы начальные/конечные пространства. Это означает, что вы должны разделить регулярное выражение на "первый символ", "материал в середине"и" последний символ":
^([a-zA-Z0-9_][a-zA-Z0-9_ ]*[a-zA-Z0-9_]$или если вы используете Perl-подобный синтаксис:
^\w[\w ]*\w$также: если вы намеренно сформулировали свое регулярное выражение, что оно также позволяет пустые строки, вы должны сделать все это необязательным:
^(\w[\w ]*\w)?$если вы хотите разрешить только одиночные символы пробела, это выглядит немного разные:
^((\w+ )*\w+)?$Это соответствует 0..n слов следует один пробел, плюс одно слово без пробела. И делает все это необязательным, чтобы разрешить пустые строки.
Это не позволяет пространство в начале. Но допускает пробелы между словами. Также позволяет использовать специальные символы между словами. Хорошее регулярное выражение для полей FirstName и LastName.
\w+.*$
только для алфавитов:
^([a-zA-Z])+(\s)+[a-zA-Z]+$для буквенно-цифрового значения и
_:^(\w)+(\s)+\w+$
это регулярное выражение
^\w+(\s\w+)*$позволит только один пробел между словами и без начальных и конечных пробелов.
Ниже приводится объяснение регулярного выражения:
^утвердить позицию в начале строки\w+соответствует любому символу слова[a-zA-Z0-9_]
- Квантор:
+от одного до неограниченного времени, как можно больше раз, отдавая по мере необходимости [жадный]- 1-я группа захвата
(\s\w+)*
- Квантор:
*от нуля до неограниченного времени, столько раз, сколько возможно, отдавая по мере необходимости [жадный]\sсоответствует любому символу пробела[\r\n\t\f ]\w+соответствует любому символу слова[a-zA-Z0-9_]
- Квантор:
+от одного до неограниченного времени, как можно больше раз, отдавая по мере необходимости [жадный]$утвердить позицию в конце строки
хорошо посмотрел на многие из этих предполагаемых ответов...
...и bupkis после очистки переполнения стека, а также других сайтов для регулярного выражения, которое соответствует любой строке без начального или конечного пробела и только один пробел между строго букву слова.
^[a-zA-Z]+[(?<=\d\s]([a-zA-Z]+\s)*[a-zA-Z]+$таким образом легко модифицируется в буквенно-цифровой:
^[a-zA-Z0-9]+[(?<=\d\s]([a-zA-Z0-9]+\s)*[a-zA-Z0-9]+$(Это не соответствует одним словам, но просто использовать переключатель/если-иначе с простым
^[a-zA-Z0-9]+$Если вам нужно поймать одного слова в дополнение.)наслаждайтесь :D
попробуйте это: (версия Python)
"(A-Za-z0-9 ){2, 25}"изменить верхний предел на основе набора данных
все вышеперечисленные коды не работают, когда пользователь включает символ клавиатуры. Итак, вот regx, когда пользователю разрешено добавлять любой символ или слово, но они могут помещать пробелы между словами.Попробуй вот это.
^[^ ]+( [^ ]+)*$
Comments