Требование к числу или специальному символу добавлено в регулярное выражение проверки пароля - PullRequest
0 голосов
/ 25 февраля 2020

Мне нужно подтвердить пароль с помощью: хотя бы одного верхнего регистра, хотя бы одного нижнего регистра, хотя бы одного символа ИЛИ , хотя бы 8 символов.

У меня есть это регулярное выражение:

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,20}$/

Это работает нормально, за исключением того, что> проверяет строку на число И символ , но не на число ИЛИ символ . А также длина символа 8-20, не менее 8, но дает диапазон. Я хочу проверить число ИЛИ символ . Любые идеи? Спасибо и хорошего дня!

1 Ответ

1 голос
/ 25 февраля 2020

Для положительного взгляда (?=.*\d) требуется ди git в строке И (?=.*[^a-zA-Z0-9]) требуется символ, отличный от буквы ASCII или ди git.

Для того, чтобы регулярное выражение требовало ди git ИЛИ символ, отличающийся от буквы ASCII или di git, объедините два вида поиска как

(?=.*[^A-Za-z])

В основном вам нужно удалить 0-9 из второго взгляда, и для этого потребуется любой символ, кроме ASCII письмо.

Результат:

/^(?=.*[^A-Za-z])(?=.*[a-z])(?=.*[A-Z]).{8,20}$/

Или более эффективная версия, основанная на принципе контрастности :

/^(?=[A-Za-z]*[^A-Za-z])(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).{8,20}$/

См. regex demo .

Если пробел не особенный, добавьте его в поле зрения:

/^(?=[A-Za-z ]*[^A-Za-z ])(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).{8,20}$/
            ^          ^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...