Помогите, пожалуйста правильно написать регулярное выражение для пароля. Строка должна быть не меньше 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("Пароль недействителен");
}
Комментариев нет:
Отправить комментарий