Регулярные выражения - совершенно неправильный подход для этого. Вместо этого просто подсчитывайте количество вхождений каждого типа символа, а затем просто используйте инструкции if и логическую логику, чтобы проверить, соблюдены ли ваши требования.
Однако, если пересмотреть то, что вы хотите сделать, это хорошая идея:
- Ограничение символов является ужасно плохой идеей. Любой символ должен быть разрешен
- Если пароль имеет определенную длину, требующую, например, символы/цифры/смешанный случай теряют большую часть своей цели. Кроме того, злоумышленник не может знать, использует ли какой-либо пользователь только строчные символы или просто цифры в своем пароле, и поэтому он не может настроить атаку грубой силы на использование только этих символов. И поскольку вы, надеюсь, будете дросселировать неправильные логины, грубая сила не является хороший вариант в любом случае.
- Представьте себе, что «правильная батарея штатной лошади» от знаменитого xkcd. Хотя все эти слова находятся в словаре и могут даже не выполнить неверно реализованную проверку пароля, это очень безопасно. В то время как одно словарное слово чрезвычайно маловероятно много, они будут легко запоминаться и защищаться (злоумышленнику придется попробовать все, например, комбинации из 4-х слов, которые являются DAMN LOT, даже с помощью словаря на 1000 слов).
Так гораздо лучше, политика паролей будет:
- Отклонить явно плохие последовательности. Это последовательные цифры, такие как 12345 или 54321. qwertz, qwerty и т. Д. Также плохи.
- Отклонить любой пароль, который можно найти в словаре в целом. Обязательно используйте как английский словарь, так и один для каждого языка, поддерживаемого вашим сайтом.
- Отклонить любой другой пароль, который может быть небезопасным. Содержит имя пользователя (даже если обратное)? Неа. Содержит часть до @ адреса электронной почты пользователя? Неа. Содержит его дату рождения? Неа.
- Требуется не менее 8 символов (как вы уже собираетесь делать).
Там также интересный пост на сайте IT Security Stack Exchange, который вы должны прочитать: Short complex password, or long dictionary passphrase?
Каковы фактические 'специальный characters'? –
Вы не используете для этого регулярные выражения. – ThiefMaster
Я лично считаю, что эта политика паролей сосет. «Специальные» символы легко для машин угадывать и очень сложно запоминать людям. [xkcd/936] (https://xkcd.com/936/) – naomik