我需要使用以下规则验证密码:
- 6 到 20 个字符
- 必须包含至少一位数字;
- 必须至少包含一个字母(不区分大小写);
- 可以包含以下字符:! @#$%&*
以下表达式匹配除最后一个要求之外的所有要求。我可以用最后一个做什么?
((?=.*\d)(?=.*[A-z]).{6,20})
我不完全确定我有这个权利,但由于你的最后一个要求是“可以包含以下字符:!@#$%&*”我假设其他特殊字符是不允许的。换句话说,唯一允许的字符是字母、数字和特殊字符 !@#$%&*。
如果这是正确的解释,则以下正则表达式应该起作用:
^((?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9!@#$%&*]{6,20})$
请注意,我将您的字符类更改[A-z]
为[a-zA-Z]
,因为[A-z]
还将包括以下字符:[\]^_`
我还添加了字符串锚点的开头和结尾,以确保您不会得到部分匹配。
正则表达式可能是:-
^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9!@#$%&*]{6,20}$
在Javascript 中如何:-
function checkPwd(str) {
if (str.length < 6) {
return("too_short");
} else if (str.length > 20) {
return("too_long");
} else if (str.search(/\d/) == -1) {
return("no_num");
} else if (str.search(/[a-zA-Z]/) == -1) {
return("no_letter");
} else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+]/) != -1) {
return("bad_char");
}
return("ok");
}
也看看这个
^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9!@#$%&*]{6,20}$