Проблема с регулярным выражением javascript, не соответствующим менее чем 3 символам - PullRequest
2 голосов
/ 05 июля 2019

У меня есть следующее регулярное выражение javascript:

/^[^\s][a-z0-9 ]+[^\s]$/i

Мне нужно разрешить любой буквенно-цифровой символ, а также пробелы внутри строки, но не в начале и не в конце.

Как ни странно, приведенное выше регулярное выражение не будет принимать менее 3 символов, например aa не будет соответствовать, но aaa будет.

Я не уверен, почему. Может кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

2 голосов
/ 05 июля 2019

У вас есть: [^\s] (требуется сопоставление хотя бы с одним непробельным символом), [a-z0-9 ]+ (требуется сопоставление хотя бы с одним буквенно-цифровым или пробелом) и снова [^\s] (требуется сопоставление хотя бы с одним непробельным символом) персонаж). Таким образом, в общей сложности вам нужно не менее 3 символов в строке.

Вместо этого используйте границы слов в начале и конце:

/^\b[a-z0-9 ]+\b$/i

https://regex101.com/r/2GhH3N/1

2 голосов
/ 05 июля 2019

Попробуйте следующее регулярное выражение:

^(?! )[a-z0-9 ]*[a-z0-9]$

подробности:

  • ^(?! ) - начало строки без пробела после нее (поэтому здесь мы исключаем начальный пробел).
  • [a-z0-9 ]* - последовательность букв, цифр и пробелов, возможно, пустая (содержание до последней буквы (см. ниже).
  • [a-z0-9]$ - последняя буква и конец строки (поэтому здесь мы исключаем Терминал).
1 голос
/ 05 июля 2019

Вы должны переписать выражение как

/^[a-z0-9]+(?:\s+[a-z0-9]+)*$/i

См. Демоверсию регулярных выражений .

ПРИМЕЧАНИЕ. Если между буквенно-цифровыми символами разрешен только один пробел, используйте

/^[a-z0-9]+(?:\s[a-z0-9]+)*$/i
              ^^ 

Детали

  • ^ - начало строки
  • [a-z0-9]+ - 1+ букв / цифр
  • (?:\s+[a-z0-9]+)* - 0 или более повторений из 1+ пробелов (\s+) и 1+ цифр / букв
  • $ - конец строки.

См. График регулярных выражений :

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...