2017-03-17 55 views
1

我有,我想申请一个密码正则表达式模式:如何指定哪些条件不匹配?

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

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

例如: abcd43 - >第1个&第3组为true;第二和第四假 (所以我可以自定义一个错误:“您的密码必须包含至少一个大写字母和标点符号。”)

+0

*“(是的,这个是用于Javascript)“*:在这种情况下使用标签。 –

+1

Javascript不支持'[[:punct:]]' –

+1

'(?= ...)'是一个前瞻断言,而不是一个捕获组。 –

回答

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

只需设置一个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'); 
} 
1

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

+0

你可以做到这两点,对吧?明确说明需求,然后在确认后指出错误消息中没有满足哪些要求。 – zahabba

相关问题