Правильное присоединение этого регулярного выражения для подтверждения пароля - PullRequest
0 голосов
/ 26 марта 2019

При попытке создать функцию jquery, которая проверяет, соответствует ли пароль определенным требованиям, пароль должен содержать как минимум 3 символа в верхнем регистре, цифры или специальные символы.Это может быть сочетание трех, так что это могут быть 2 заглавные буквы и одна специальная и т. Д.Кажется, я не могу понять, как.

$('#Password').blur(function () {
        var pswd = $(this).val();
        if (pswd.length > 7) {
            if (pswd.match(/(?=(.*[A-Z].*){3,}).{7,}/) // 3 caps
                ||
                pswd.match(/(?=(.*\W.*){3,}).{7,}/) // 3 special chars
                ||
                pswd.match(/(?=(.*\d.*){3,}).{7,}/) // 3 digits
                ||
                (pswd.match(/(?=(.*[A-Z].*){2,})/ && pswd.match(/(?=(.*\W.*){1,})/))) // 2 caps 1 special
                ||
                (pswd.match(/(?=(.*[A-Z].*){1,})/ && pswd.match(/(?=(.*\W.*){2,})/))) // 1 cap 2 special
                ||
                (pswd.match(/(?=(.*[A-Z].*){2,})/ && pswd.match(/(?=(.*\d.*){1,})/))) // 2 cap 1 digit
                ||
                (pswd.match(/(?=(.*[A-Z].*){1,})/ && pswd.match(/(?=(.*\d.*){2,})/))) // 1 cap 2 digit
                ||
                (pswd.match(/(?=(.*\W.*){2,})/ && pswd.match(/(?=(.*\d.*){1,})/))) // 2 special 1 digit
                ||
                (pswd.match(/(?=(.*\W.*){1,})/ && pswd.match(/(?=(.*\d.*){2,})/))) // 1 special 2 digit
                ||
                (pswd.match(/(?=(.*\W.*){1,})/ && pswd.match(/(?=(.*\d.*){1,})/) && pswd.match(/(?=(.*[A-Z].*){1,})/)))
            ) // 1 of each /
            {
                $('#Message').hide();
            }
        } else {
            $('#Message').show();
        }
    });

Функция работает нормально, но я хочу улучшить регулярное выражение, возможно ли выполнить ту же проверку пароля за меньшее время или уменьшить код.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Что делать, если вы посчитаете вхождение специального символа в строку, например:

pswd.match(/(?=[A-Z])|(?=[0-9])|(?=[#$^+=!*()@%&])/g).length

... и сравните с '3' в вашем случае.

@ PJProudhon - Спасибоза предложение:

pswd.match(/[A-Z]|[0-9]|[#$^+=!*()@%&]/g).length
0 голосов
/ 26 марта 2019

Фокус на «должен содержать не менее 3 символов, являющихся прописными, цифрами или специальными символами».

Вы можете выразить это как: содержит не менее 3 символов, которые не являются строчными. Таким образом, здесь даже не нужно объединяться.

Я попробую ^(?=(?:[a-z]*[^a-z]){3}).{7,}$.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...