分解JavaScript正则表达式以获得密码强度

分解JavaScript正则表达式以获得密码强度,javascript,regex,Javascript,Regex,我有一个正则表达式用来检查我的密码有效性(我在互联网上找到的)。它检查6个字符的最小长度、至少一个上限、至少一个下限、至少一个数字和一个符号。我想分解这个正则表达式并将其放入数组中,以便检查密码强度 var regexp=/^((?=.*\d)(?=.[a-z])(?=.[a-z])(?=.[@#$%!])。{6,})$/ 然后我会有这样的东西: var passwordval = 'fdSfdDSF'; var tests = [ '(?=.*\d)', '(?=.*[a-

我有一个正则表达式用来检查我的密码有效性(我在互联网上找到的)。它检查6个字符的最小长度、至少一个上限、至少一个下限、至少一个数字和一个符号。我想分解这个正则表达式并将其放入数组中,以便检查密码强度

var regexp=/^((?=.*\d)(?=.[a-z])(?=.[a-z])(?=.[@#$%!])。{6,})$/
然后我会有这样的东西:

var passwordval = 'fdSfdDSF';

var tests = [
    '(?=.*\d)',
    '(?=.*[a-z])',
    '(?=.*[A-Z])',
    '(?=.*[@#$%!])',
    '.{6,}'
],
    strength = 0;

for (var i=0, l=tests.length; i<l; i++) {

    var re = new RegExp(tests[i]);

    if (re.test(passwordval)) {

        strength += 1;

    }

}

console.log(strength);
// 4
if(regexparray[0].test(passwordval)){
strengt++;
}else if(regexparray[1].test(passwordval)){
strengt++;
} 
//等等。。。。

编辑:将这个正则表达式分成几个部分的正确方法是什么?

扩展Jorge Campos的评论,您可以这样做:

var passwordval = 'fdSfdDSF';

var tests = [
    '(?=.*\d)',
    '(?=.*[a-z])',
    '(?=.*[A-Z])',
    '(?=.*[@#$%!])',
    '.{6,}'
],
    strength = 0;

for (var i=0, l=tests.length; i<l; i++) {

    var re = new RegExp(tests[i]);

    if (re.test(passwordval)) {

        strength += 1;

    }

}

console.log(strength);
// 4
var passwordval='fdSfdDSF';
var测试=[
“(?=*\d)”,
“(?=*[a-z])”,
“(?=*[A-Z])”,
'(?=.*[@#$%!])',
'.{6,}'
],
强度=0;

对于(var i=0,l=tests.length;我在这里看不到任何问题。尝试一下,然后带着特定的问题返回。我的问题是如何正确地分解该regexp!我只是从internet上获取它,不知道它是如何工作的。我以前从未使用过reg.exp.
regexparray[0]=/(?=.\d)/;regexparray[1]=/(?=.[a-z])/
等等……每个括号都是一个组……传递短语通常被认为比传递单词更好,但如果您所做的只是检查长度,那么没有什么可以阻止用户输入123456789001234567890作为20个字符的传递短语。相反,正如@WayneConrad的评论所示,最好的方法可能是不输入o,但这会变得复杂,根据文章,列出的9个主要网站中没有一个使用熵来确定密码强度。@Mike,好的观点。一个折衷办法是使用密码强度检查器。我从诸如libpwquality之类的密码检查器中得到了很好的服务(尽管我不能保证这一点)。许多web框架都有插件将身份验证系统绑定到密码强度检查器中。非常感谢!但是开头的“^”和结尾的“$”怎么办?它们不重要吗?@Manuel,
^
表示字符串的开头,
$
表示字符串的结尾。不使用它们应该很好。