Вам также следует подумать об изменении некоторых из ваших правил на:
- Добавьте дополнительные специальные символы, например%, ^, (,), -, _, + и точку. Я добавляю все специальные символы, которые вы пропустили, над цифровыми знаками на клавиатуре США. Избегайте тех, которые использует регулярное выражение.
- Сделайте пароль 8 или более символов. Не просто статичное число 8.
С указанными выше улучшениями, а также для большей гибкости и читабельности я бы изменил регулярное выражение на.
^(?=(.*[a-z]){3,})(?=(.*[A-Z]){2,})(?=(.*[0-9]){2,})(?=(.*[!@#$%^&*()\-__+.]){1,}).{8,}$
Основное объяснение
(?=(.*RULE){MIN_OCCURANCES,})
Каждый блок правил обозначен (? = () {}). Затем правило и количество вхождений могут быть легко определены и протестированы по отдельности, прежде чем объединяться.
Детальное объяснение
^ start anchor
(?=(.*[a-z]){3,}) lowercase letters. {3,} indicates that you want 3 of this group
(?=(.*[A-Z]){2,}) uppercase letters. {2,} indicates that you want 2 of this group
(?=(.*[0-9]){2,}) numbers. {2,} indicates that you want 2 of this group
(?=(.*[!@
{8,} indicates that you want 8 or more
$ end anchor
И, наконец, для целей тестирования вот robulink с указанным выше регулярным выражением