我有,我想申请一个密码正则表达式模式:如何指定哪些条件不匹配?
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[[:punct:]])./
有4个捕捉组。我希望能够知道哪些捕获组与提供的字符串不匹配,因此我可以向用户提供具体的反馈。
例如: abcd43 - >第1个&第3组为true;第二和第四假 (所以我可以自定义一个错误:“您的密码必须包含至少一个大写字母和标点符号。”)
我有,我想申请一个密码正则表达式模式:如何指定哪些条件不匹配?
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[[:punct:]])./
有4个捕捉组。我希望能够知道哪些捕获组与提供的字符串不匹配,因此我可以向用户提供具体的反馈。
例如: abcd43 - >第1个&第3组为true;第二和第四假 (所以我可以自定义一个错误:“您的密码必须包含至少一个大写字母和标点符号。”)
最简单的方法是分别检查四个组。
您可以使用简单的东西如:
if(!lowerCase(pass))
print "No lower case letters"
else if(!upperCase(pass))
print "No upper"
else if(!digits(pass))
print "No digits"
etc...
只需设置一个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');
}
Javascript does not在正则表达式中直接支持命名捕获组。那么最好的办法就是简单地检查组,并将数字映射到一个条件,或许通过一个数组。所以你可能会有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个字符更安全。)
你可以做到这两点,对吧?明确说明需求,然后在确认后指出错误消息中没有满足哪些要求。 – zahabba
*“(是的,这个是用于Javascript)“*:在这种情况下使用标签。 –
Javascript不支持'[[:punct:]]' –
'(?= ...)'是一个前瞻断言,而不是一个捕获组。 –