Выражение регулярного выражения для сложной установки пароля angular 8

Я пробовала это выражение -

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$

Это регулярное выражение будет обеспечивать соблюдение следующих правил:

По крайней мере, одна заглавная английская буква, (?=.*?[A-Z])

По крайней мере, одна строчная английская буква (?=.*?[a-z])

Как минимум одна цифра, (?=.*?[0-9])

По крайней мере, один специальный символ, (?=.*?[#?!@$%^&*-])

Длина не менее восьми .{8,} (с анкерами)

Каким будет регулярное выражение для приведенного ниже требования.

  • Для паролей длиной 13 и более символов требуются только строчные буквы.
  • Пароли должны содержать не менее 8 символов.
  • Passwords between 8 and 13 characters require at least 3 of the following 4 categories of characters:
    • Uppercase letters
    • Строчные буквы
    • Числа
    • Символы

person San Jaisy    schedule 03.12.2019    source источник
comment
Хорошо, а почему вы пытаетесь решить такую ​​сложную задачу с таким большим количеством условной логики с помощью одного регулярного выражения? есть известная поговорка, гласящая, что если у вас есть проблема, которую вы пытаетесь решить с помощью регулярного выражения, у вас есть две проблемы. Почему бы вам просто не использовать для этого старое доброе императивное программирование? Вы знаете ... if (pass.length > 13) { checkPass13(pass) } и т. Д. Я говорю, что регулярное выражение не является хорошим решением вашей проблемы.   -  person Nemoden    schedule 03.12.2019
comment
@Nemoden - звучит хорошо   -  person San Jaisy    schedule 03.12.2019
comment
@Nemoden +1. Что-нибудь еще, кроме регулярного выражения, почти всегда будет легче рассуждать :)   -  person jensgram    schedule 03.12.2019
comment
См. Справочник - проверка пароля   -  person ctwheels    schedule 03.12.2019


Ответы (1)


Хотя одно регулярное выражение может быть не самым читаемым / разумным способом сделать это, на самом деле это довольно просто:

^(?=.*?[a-z])(.{13,}|(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,12})$

Я просто добавил изменение длины, так что для 13+ символов просто требуется [a-z], а для 8-12 символов (можно опустить верхнюю границу из-за упорядочения) требуется полный monty.

person jensgram    schedule 03.12.2019