【发布时间】:2019-08-16 16:28:59
【问题描述】:
尝试创建一个 jquery 函数来检查密码是否满足某些要求,密码必须包含至少 3 个字符,即大写、数字或特殊字符。这可以是 3 个的混合,所以可以是 2 个大写和 1 个特殊等......
我创建了一个使用正则表达式检查的函数,但它很长,我知道它可以连接在一起,但我似乎无法弄清楚如何。
$('#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();
}
});
该功能工作正常,但我想改进正则表达式,是否可以在更好的时间内进行相同的密码检查或减少代码。
【问题讨论】:
-
我知道我可以用 .但是有没有更好更有效的方法。
-
"但它很长,我知道它可以连接在一起" 你想制作一个单一的正则表达式,还是想让你的函数更具可读性?
-
我正在寻找单个正则表达式,我不确定它是否可以实现。
标签: javascript jquery regex passwords