我有一个我想要应用于密码的正则表达式模式:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[[:punct:]])./
有4个捕获组。我希望能够知道哪些捕获组与提供的字符串不匹配,因此我可以向用户提供具体的反馈。
例如: abcd43 - >第1&第3组真实;第2和第4次假 (所以我可以自定义错误:"您的密码必须包含至少一个大写字母和标点字符。")
答案 0 :(得分:1)
最简单的方法是分别检查四组。
你可以使用简单的东西:
if(!lowerCase(pass))
print "No lower case letters"
else if(!upperCase(pass))
print "No upper"
else if(!digits(pass))
print "No digits"
etc...
答案 1 :(得分:1)
只需将varibale设置为匹配组并检查每个组:
var pattern =/...../ //whatever
var ma = 'my string'.match(pattern);
if (!ma)
console.log('No match');
else{
console.log(ma[0]) // first group.
console.log(m[1]); // second group;
}
现在只需检查每个组是否有值,每个索引按顺序代表相应的括号:
if (!m[0]){
alert('your password does not match first parenthesis');
}
答案 2 :(得分:1)
Javascript不直接支持正则表达式中的命名捕获组。那么您最好的选择就是简单地检查组,并将数字映射到条件,可能通过数组。所以你可能有1 - > “小写字母”,2 - > “大写”等。
然后只需构建与失败相对应的消息,并显示该消息。
"lower case" -> "Passwords must contain at least one lower case letter"
"upper case" -> "Passwords must contain at least one upper case letter."
现在,有了这个说,请,请不要这样做。我使用密码生成器和密码存储来登录。如果您要施加更多限制而不仅仅是长度,请在前面公布所有限制。不要试图“自定义”错误消息告诉我我缺少什么。 (而且,实际上,只需要一个很长的密码。如果你需要16个字符,没有其他限制,你比1个数字,1个上限和1个字符的8个字符更安全。)