Regex, чтобы найти 3 из 4 условий
Мой клиент запросил, чтобы пароли в их системе соответствовали определенному набору правил проверки, и у меня возникли большие трудности с созданием «красивого» регулярного выражения.
Правила, которые мне дали, это ...
Минимум 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.)