регулярное выражение, допускающее пробелы между словами
Мне нужно регулярное выражение, которое предотвращает символы и разрешает только буквы и цифры. Это регулярное выражение отлично работает, но оно не допускает пробелов между словами.
^[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 независимо.)
некоторые вещи, чтобы отметить об этом (и @СТЭМа) в ответ:
-
если вы хотите разрешить несколько пробелы между словами (скажем, если вы хотите разрешить случайные двойные пробелы или если вы работаете с копией вставленного текста из PDF), затем добавьте
+
после пространство:^\w+( +\w+)*$
-
если вы хотите разрешить вкладки и новые строки (пробелы), замените пробел на
\s+
:^\w+(\s+\w+)*$
здесь я предлагаю
+
по умолчанию, потому что, например, Windows linebreaks состоят из два пробелы в последовательности символов,\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
это в большинстве вкусов regex то же самое, что [a-zA-Z0-9_]
(в некоторых он основан на Unicode)
^\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]+$
(Это не соответствует одним словам, но просто используйте переключатель / if-else с простым ^[a-zA-Z0-9]+$
Если вам нужно поймать одного слова в дополнение.)
наслаждайтесь :D
попробуйте это: (версия Python)
"(A-Za-z0-9 ){2, 25}"
измените верхний предел на основе вашего набора данных
все вышеперечисленные коды не работают, когда пользователь включает символ клавиатуры. Итак, вот regx, когда пользователю разрешено добавлять любой символ или слово, но они могут помещать пробелы между словами.Попробуй вот это.
^[^ ]+( [^ ]+)*$