Регулярное число ИЛИ символ - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь создать регулярное выражение, которое будет соответствовать следующим требованиям для пароля.

  1. Должен иметь по крайней мере 1 заглавную букву
  2. Должен иметь по крайней мере 1 строчную букву
  3. Должен содержать число ИЛИ символ - FAILS
  4. Должно быть длиной от 8 до 16 символов

    ^(?=.*\d|[!@#\$%\^&])(?=.*[a-z])(?=.*[A-Z]).{8,16}$

У меня все работает, почти все, кроме части ИЛИ.Например, он проверяет Tester01 и Tester0%, но не проверяет Tester% $ или что-либо с двумя символами, на случай, если пользователь не введет число.Я также пытался заключить в скобки \ d, думая, что должен отделить цифры от символов, но это не сработало.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Используйте принцип контраста с несколькими взглядами.

^
(?=[^A-Z]*[A-Z])
(?=[^a-z]*[a-z])
(?=[^\d!@#\$%\^&]*[^\d!@#\$%\^&])
.{8,16}
$

Но , пожалуйста, прочитайте также этот пост (почему проверки пароля плохие?) И посмотрите демо на regex101.com .

0 голосов
/ 06 февраля 2019

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

^(?=.*[\d!@#\$%\^&])(?=.*[a-z])(?=.*[A-Z]).{8,16}$

Теперь ваш взгляд в будущее (?=.*[\d!@#\$%\^&]) ведет себя именно так, как вы хотели.Это гарантирует, что либо один символ будет любой цифрой, либо другие специальные символы, упомянутые в вашем классе символов.

Демо

Причина, по которой вашзаглянуть в будущее (?=.*\d|[!@#\$%\^&]) не удается, потому что ваше первое условие чередования .*\d, а второе - просто [!@#\$%\^&], где, как если бы оно было правильно написано, это должно было быть либо:

(?=.*\d|.*[!@#\$%\^&])

ИЛИ

(?=.*(\d|[!@#\$%\^&]))

И вам действительно не нужно чередование, если вы пишете это так, как я написал выше, где вы можете просто поместить \d в самом наборе символов, например,

(?=.*([\d!@#\$%\^&]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...