регулярное выражение для разрешения пробелов между словами



Я хочу, чтобы регулярное выражение, которое предотвращает символов только буквы и цифры. Это регулярное выражение отлично работает, но оно не допускает пробелов между словами.



^[a-zA-Z0-9_]*$


например, при использовании этого регулярного выражения" HelloWorld "отлично, но" Hello World " не соответствует.



Как я могу настроить его, чтобы разрешить пробелы?

838   14  

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+ ?)*$

объяснение:

\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+)*$

позволит только один пробел между словами и без начальных и конечных пробелов.

Ниже приводится объяснение регулярного выражения:

  1. ^ утвердить позицию в начале строки
  2. \w+ соответствует любому символу слова [a-zA-Z0-9_]
    1. Квантор: + от одного до неограниченного времени, как можно больше раз, отдавая по мере необходимости [жадный]
  3. 1-я группа захвата (\s\w+)*
    1. Квантор: * от нуля до неограниченного времени, столько раз, сколько возможно, отдавая по мере необходимости [жадный]
    2. \s соответствует любому символу пробела [\r\n\t\f ]
    3. \w+ соответствует любому символу слова [a-zA-Z0-9_]
      1. Квантор: + от одного до неограниченного времени, как можно больше раз, отдавая по мере необходимости [жадный]
  4. $ утвердить позицию в конце строки

хорошо посмотрел на многие из этих предполагаемых ответов...

...и 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}"

изменить верхний предел на основе набора данных

Я нахожу, что это хорошо работает для "FullName":

([a-z',.-]+( [a-z',.-]+)*){1,70}/

все вышеперечисленные коды не работают, когда пользователь включает символ клавиатуры. Итак, вот regx, когда пользователю разрешено добавлять любой символ или слово, но они могут помещать пробелы между словами.Попробуй вот это.

 ^[^ ]+( [^ ]+)*$

просто добавьте пробел в конец вашего шаблона регулярных выражений следующим образом:

[a-zA-Z0-9_ ]

попробовать .* ? чтобы разрешить пробелы, он работал для меня

Comments

    Ничего не найдено.