Регулярное выражение не работает - минимум 1 верхний регистр, минимум 3 строчные буквы, минимум 1 специальный символ из определенной группы (подробнее в описании) - PullRequest
0 голосов
/ 23 марта 2019

Мне нужно создать регулярное выражение со следующими требованиями: Пароль должен содержать не менее 8 символов и не более 12 символов, не менее 1 заглавной буквы, не менее 3 строчных букв, не менее 1 цифры и не менее 1 специального символа изгруппа (# *.!? $), без скобок.Первый символ должен быть заглавной или строчной буквой.Два последовательных одинаковых символа не должны появляться в пароле.Я сделал это, но это не работает:

^(?=.{8,12}$)(([a-z]|[A-Z])(?=.*\d){1,}(?=.*[a-z]){3,}(?=.*[A-Z]){1,}(?=.*[!.?*$#])\2?(?!\2))+$

Я пытался проверить это с Abcd123 !, но это не работает.Кто-нибудь может объяснить, где я допустил ошибку и что я на самом деле здесь сделал?

1 Ответ

1 голос
/ 23 марта 2019

Вы используете квантификатор, такой как {1,}, для неправильного просмотра.

Я думаю, что вы хотели использовать прогнозирование следующим образом:

^(?=.{8,12}$)(?=[^A-Z]*[A-Z])(?=\D*\d)(?=(?:[^a-z]*[a-z]){3})(?=[^\s#*.!?$]*[#*.!?$])(?!.*(.)\1)(?:[a-z]|[A-Z])[a-zA-Z0-9#*.!?$,]+$

О шаблоне

  • ^ Начало строки
  • (?=.{8,12}$) Подтверждение длины 8 - 12
  • (?=[^A-Z]*[A-Z]) Утверждение заглавной буквы
  • (?=\D*\d)Утвердить цифру
  • (?=(?:[^a-z]*[a-z]){3}) Утверждение 3 строчных символа
  • (?=[^\s#*.!?$]*[#*.!?$]) Утверждение специального символа
  • (?!.*(.)\1) Утверждение не двух последовательных символов
  • (?:[a-z]|[A-Z]) Начните с заглавных или строчных букв
  • [a-zA-Z0-9#*.!?$,]+ Совпадение 1+ раз с любым из перечисленных в классе символов
  • $ Утверждение конца строки

Regex demo | Php demo

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