Страницы

Поиск по вопросам

понедельник, 17 июня 2019 г.

Регулярное выражение для проверки пароля

Помогите, пожалуйста правильно написать регулярное выражение для пароля. Строка должна быть не меньше 8 символов, содержать как минимум 1 большую букву, одну маленькую букву и ЛИБО спец. символ ЛИБО цифру.
Сейчас у меня есть модель, но здесь идет И спец. символ И цифра должна быть, как сделать проверку именно Либо спец. символ либо цифра?
((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,40})


Ответ

Ваше выражение почти готово: только \d надо перенести в [@#$%] и удалить ограничение в 40 символов:
^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9@#$%]).{8,}$ ^^^^
Если этот шаблон используется в String#matches, ^ и $ можно удалить. Если верхнее ограничение в 40 символов нужно (не указано в вопросе), можно вернуть {8,40}
Суть в том, что отношения между членами внутри символьного класса отношения ИЛИ, поэтому блок (?=.*[0-9@#$%]) требует присутствия в строке ИЛИ цифр, или указанных символов.
Демо регулярного выражения
Пример на Java
String s = "###abcA@@"; String pat = "(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9@#$%]).{8,}"; if (s.matches(pat)) { System.out.println("Пароль действителен"); } else { System.out.println("Пароль недействителен"); }

Комментариев нет:

Отправить комментарий