Регулярное выражение, соответствующее нежелательным специальным символам

Может ли кто-нибудь объяснить мне, почему следующее регулярное выражение

^(?=.*\w)(?=.*[!@#$*_])(?!.*\s).{8,20}$

совпадение : test*~|-*test

Я пытаюсь проверить следующие правила:

  • От 8 до 20 символов
  • Хотя бы один специальный символ из !@#$*_
  • Кроме этого, только буквенно-цифровые

person user3675875    schedule 26.05.2014    source источник
comment
Хороший сервис для объяснения регулярных выражений: ссылка   -  person Oleksii Aza    schedule 26.05.2014


Ответы (1)


Ваш шаблон требует

(1) (?=.*\w) хотя бы одно слово char

(2) (?=.[!@#$_]) хотя бы один из этих специальных символов

(3) (?!.*\s) без пробела

(4) .{8,20} любой символ, длиной от 8 до 20

Ваш ввод test*~|-*test соответствует шаблону

Для того, что вы после того, как я бы использовал

^(?=.*[!@#$*_])(?=.*\w)[\w!@#$*_]{8,20}$

(1) (?=.[!@#$_]) хотя бы один специальный символ

(2) (?=.*\w) хотя бы одно слово char

(3) [\w!@#$*_]{8,20} символ слова или специальный символ, от 8 до 20 раз

person Gregory Adam    schedule 26.05.2014