正确加入此正则表达式以确认密码
Correct joining of this regex for password confirmation
尝试创建一个 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();
}
});
该功能运行良好,但我想改进正则表达式,是否可以在更短的时间内或减少代码来执行相同的密码检查。
关注"must contain at least 3 characters being uppercase, numbers or special characters"。
可以表示为:至少包含3个非小写字符。这样这里甚至不需要连接。
我会尝试^(?=(?:[a-z]*[^a-z]){3}).{7,}$
。
如果计算字符串中特殊字符的出现次数,如:
pswd.match(/(?=[A-Z])|(?=[0-9])|(?=[#$^+=!*()@%&])/g).length
...并与您的情况下的“3”进行比较。
@PJProudhon - 感谢您的建议:
pswd.match(/[A-Z]|[0-9]|[#$^+=!*()@%&]/g).length
尝试创建一个 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();
}
});
该功能运行良好,但我想改进正则表达式,是否可以在更短的时间内或减少代码来执行相同的密码检查。
关注"must contain at least 3 characters being uppercase, numbers or special characters"。
可以表示为:至少包含3个非小写字符。这样这里甚至不需要连接。
我会尝试^(?=(?:[a-z]*[^a-z]){3}).{7,}$
。
如果计算字符串中特殊字符的出现次数,如:
pswd.match(/(?=[A-Z])|(?=[0-9])|(?=[#$^+=!*()@%&])/g).length
...并与您的情况下的“3”进行比较。
@PJProudhon - 感谢您的建议:
pswd.match(/[A-Z]|[0-9]|[#$^+=!*()@%&]/g).length