Запутался, почему это регулярное выражение не работает? - PullRequest
0 голосов
/ 17 февраля 2010
/^(?=.*\d)(?=.*[!@&.$#]).{7,16}$/

Он должен содержать от 7 до 16 символов и содержать как минимум 1 цифровой символ и 1 специальный символ и не может начинаться с цифры. Я пытался протестировать его, но он не работает?

Ответы [ 2 ]

4 голосов
/ 17 февраля 2010

Единственное, что я полагаю, «не работает», что, если честно, немного расплывчато, так это то, что оно МОЖЕТ начинаться с цифры. Кроме того, он работает так, как вы описали.

Исправьте это так:

/^(?=.*\d)(?=.*[!@&.$#])\D.{6,15}$/

Краткое объяснение (если вы сами не написали регулярное выражение):

^             # match the beginning of the input
(?=           # start positive look ahead
  .*          #   match any character except line breaks and repeat it zero or more times
  \d          #   match a digit: [0-9]
)             # end positive look ahead
(?=           # start positive look ahead
  .*          #   match any character except line breaks and repeat it zero or more times
  [!@&.$#]    #   match any character from the set {'!', '#', '$', '&', '.', '@'}
)             # end positive look ahead
\D            # match a non-digit: [^0-9]
.{6,15}       # match any character except line breaks and repeat it between 6 and 15 times
$             # match the end of the input
2 голосов
/ 17 февраля 2010

Первые два условия выполнены, но третье (не должно начинаться с цифры) - нет. Потому что .* в ^(?=.*\d) совпадает, когда в первой позиции находится цифра.

Попробуйте вместо этого:

/^(?=\D+\d)(?=.*[!@&.$#]).{7,16}$/

Здесь \D (все, кроме цифры) гарантирует, что в начале будет хотя бы один нецифровый символ.

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