如何指定哪个条件不匹配?

时间:2017-03-17 20:57:49

标签: javascript regex

我有一个我想要应用于密码的正则表达式模式:

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[[:punct:]])./

有4个捕获组。我希望能够知道哪些捕获组与提供的字符串不匹配,因此我可以向用户提供具体的反馈。

例如: abcd43 - >第1&第3组真实;第2和第4次假 (所以我可以自定义错误:"您的密码必须包含至少一个大写字母和标点字符。")

3 个答案:

答案 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个字符更安全。)