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.)

Ответы на вопрос(4)

Ваш ответ на вопрос