Мой клиент запросил, чтобы пароли в своей системе должны следовать определенному набору правил проверки, и у меня возникают большие трудности с "хорошим" регулярным выражением.
Правила, которые мне даны,...
- Минимум 8 символов
- Разрешить любой символ
- Должен иметь хотя бы один экземпляр из трех из четырех следующих типов символов...
- Символ верхнего регистра
- Нижний регистр символов
- Числовая цифра
- "Специальный символ"
Когда я нажал больше, "Специальные символы" буквально все остальное (включая пробелы).
Я могу легко проверить хотя бы один экземпляр для всех четырех, используя следующее...
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?\d)(?=.*?[^a-zA-Z0-9]).{8,}$
Следующие работы, но это ужасно и грязно...
^((?=.*?[A-Z])(?=.*?[a-z])(?=.*?\d)|(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[^a-zA-Z0-9])|(?=.*?[A-Z])(?=.*?\d)(?=.*?[^a-zA-Z0-9])|(?=.*?[a-z])(?=.*?\d)(?=.*?[^a-zA-Z0-9])).{8,}$
Таким образом, вам не нужно самостоятельно его выполнять, выше проверяется (1,2,3|1,2,4|1,3,4|2,3,4)
, которые являются 4 возможными комбинациями из 4 групп (где число относится к "типам" в наборе правил).
Есть ли "более приятный", более чистый или простой способ сделать это?
(Обратите внимание: это будет использоваться в элементе управления <asp:RegularExpressionValidator>
на веб-сайте ASP.NET, поэтому должно быть допустимым регулярным выражением для .NET и javascript.)