Регулярное выражение пароля
Как составить регулярку для проверки пароля который должен состоять из
- 2-4 заглавных букв
[A-Z], - 2-4 строчных
[a-z]и - 2-4 цифры
\d, порядок которых может быть разный.
Пример:
BPY49io
Вот так выглядит моё выражение, которое не работает:
^(?=[A-Z]{2,4})(?=[a-z]{2,4})(?=\d{2,4})$
Ответы (1 шт):
Автор решения: Wiktor Stribiżew
→ Ссылка
Используйте
^(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$)(?=(?:[^a-z]*[a-z]){2,4}[^a-z]*$)(?=(?:\D*\d){2,4}\D*$)[A-Za-z\d]+$
См. пример работы регулярного выражения.
Если в пароле разрешены любые символы, замените [A-Za-z\d] на .:
^(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$)(?=(?:[^a-z]*[a-z]){2,4}[^a-z]*$)(?=(?:\D*\d){2,4}\D*$).+$
Если в пароле не должно быть пробельных символов, вместо [A-Za-z\d] и . надо использовать \S:
^(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$)(?=(?:[^a-z]*[a-z]){2,4}[^a-z]*$)(?=(?:\D*\d){2,4}\D*$)\S+$
И ещё один аспект: если необходимо ограничить длину пароля, вместо + в конце используйте
{8}- ровно восемь символов, не более и не менее{8,}- восемь и более символов{8,30}- от восьми до тридцати символов.
Подробности
^- начало строки(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$)- блок предварительного просмотра вперёд, который требует того, чтобы сразу после текущей позиции было 2, 3 или 4 повтора последовательности 0 и более символов, отличных отA-Z, за которыми следует заглавная буква, а потом 0 и более символов, отличных от `A-Z до конца строки (т.е. "необходимо наличие двух, трёх или четырёх (но не более) заглавных букв")(?=(?:[^a-z]*[a-z]){2,4}[^a-z]*$)- аналогично вышеописанному шаблону, "необходимо наличие двух, трёх или четырёх (но не более) строчных букв"(?=(?:\D*\d){2,4}\D*$)- аналогично вышеописанному шаблону, "необходимо наличие двух, трёх или четырёх (но не более) цифр" (\Dнаходит любой символ, отличный от цифры)[A-Za-z\d]+- одна и более букв или цифр.+- один и более любых символов, отличных от символов перевода строки\S+- один и более пробельных символов$- конец строки.
Примеры использования:
- javascript -
/^(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$)(?=(?:[^a-z]*[a-z]){2,4}[^a-z]*$)(?=(?:\D*\d){2,4}\D*$)[A-Za-z\d]+$/.test(string) - php -
preg_match('/^(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$)(?=(?:[^a-z]*[a-z]){2,4}[^a-z]*$)(?=(?:\D*\d){2,4}\D*$)[A-Za-z\d]+$/D', $mystring) - c# -
Regex.IsMatch(mystring, @"^(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*\z)(?=(?:[^a-z]*[a-z]){2,4}[^a-z]*\z)(?=(?:\D*\d){2,4}\D*\z)[A-Za-z\d]+\z") - java -
mystring.matches("(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*\\z)(?=(?:[^a-z]*[a-z]){2,4}[^a-z]*\\z)(?=(?:\\D*\\d){2,4}\\D*\\z)[A-Za-z\\d]+") - python -
re.fullmatch(r'(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*\Z)(?=(?:[^a-z]*[a-z]){2,4}[^a-z]*\Z)(?=(?:\D*\d){2,4}\D*\Z)[A-Za-z\d]+', mystring) - ruby -
/\A(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*\z)(?=(?:[^a-z]*[a-z]){2,4}[^a-z]*\z)(?=(?:\D*\d){2,4}\D*\z)[A-Za-z\d]+\z/.match?(string) - powershell -
$mystring -cmatch '^(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$)(?=(?:[^a-z]*[a-z]){2,4}[^a-z]*$)(?=(?:\D*\d){2,4}\D*$)[A-Za-z\d]+\z' - swift -
if password.range(of: #"^(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$)(?=(?:[^a-z]*[a-z]){2,4}[^a-z]*$)(?=(?:\D*\d){2,4}\D*$)[A-Za-z\d]+\z"#, options: .regularExpression) != nil { print(true) }