Regex для надежности пароля с дополнительными правилами для первого символа - PullRequest
0 голосов
/ 12 ноября 2018

Мне нужно регулярное выражение для надежности пароля, которое имеет 3 различных правила:

  1. Минимум 3 из 4 групп (строчные, прописные, цифры, специальные символы)
  2. Минимум 8 символов
  3. Первый символ не '{' (некоторые ограничения продукта, где это реализовано)

Пока у меня есть регулярное выражение, которое выполняет первые два правила.Кроме того, я смог расширить регулярное выражение, чтобы ограничить первый символ.Однако моя текущая проблема заключается в том, что когда я ограничиваю первый символ, это не учитывается в отношении первого правила.Например, следующий пароль не проходит: $ MyPassword

Исходное правило: ^((?=.*?[A-Z])(?=.*?[a-z])(?=.*?\d)|(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[^a-zA-Z0-9])|(?=.*?[A-Z])(?=.*?\d)(?=.*?[^a-zA-Z0-9])|(?=.*?[a-z])(?=.*?\d)(?=.*?[^a-zA-Z0-9])).{8,}$

Расширенное правило: ^[^{]{1}((?=.*?[A-Z])(?=.*?[a-z])(?=.*?\d)|(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[^a-zA-Z0-9])|(?=.*?[A-Z])(?=.*?\d)(?=.*?[^a-zA-Z0-9])|(?=.*?[a-z])(?=.*?\d)(?=.*?[^a-zA-Z0-9])).{8,}$

Так как я все еще немного потерян с обычнымвыражения, я был бы признателен за решение, включая некоторые объяснения.

Заранее спасибо!

Примечание: я буду использовать это регулярное выражение в javascript.

1 Ответ

0 голосов
/ 12 ноября 2018

Почти там, вы должны поставить отрицательное утверждение на { спереди вместо несовпадающего символа.Это позволяет вам вводить любой символ и не учитывает утверждение, которое испортит все ваши правила.

Это будет ваше регулярное выражение: ^(?=[^\{])((?=.*?[A-Z])(?=.*?[a-z])(?=.*?\d)|(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[^a-zA-Z0-9])|(?=.*?[A-Z])(?=.*?\d)(?=.*?[^a-zA-Z0-9])|(?=.*?[a-z])(?=.*?\d)(?=.*?[^a-zA-Z0-9])).{8,}$

Если вы хотите знать, что выделаете, пожалуйста, посмотрите эту статью , которая объясняет утверждения.Это сделает более понятным использование (?=.

...