Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 密码验证regexp_Javascript_Regex - Fatal编程技术网

Javascript 密码验证regexp

Javascript 密码验证regexp,javascript,regex,Javascript,Regex,我正在尝试使用regexp进行密码验证 ^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,}$ 它至少限制1位数字、1个大写字母和1个小写字母,不是吗? 那么为什么以下结果为true (new RegExp('^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,}$')).test('aaAAffffaAfDvad') 但是下一个false (new RegExp('^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,}$')).tes

我正在尝试使用regexp进行密码验证

^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,}$
它至少限制1位数字、1个大写字母和1个小写字母,不是吗?
那么为什么以下结果为
true

(new RegExp('^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,}$')).test('aaAAffffaAfDvad')
但是下一个
false

(new RegExp('^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,}$')).test('aaAA112')
在JS控制台(firebug或其他)中,尝试以下操作:

var re = /^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$/
那么这个,

var re2 = new RegExp('^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$')
然后你只要检查结果。。。您将看到,在re2中,
\d
不是针对regexp正确转义的,而是针对字符串转义的

编辑:
找到这是因为
\d
中的
\
未正确转义:

>>> var x = new RegExp('^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$');
>>> x
/^(?=.*d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$/

>>> var x = new RegExp('^(?=.*\\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$');
>>> x
/^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$/
您还可以利用此函数进行适当的regexp转义:

RegExp.escape = function(s) {
    return s.replace( /[-\/\\^$*+?.()|[\]{}]/g, "\\$&" );
};
var x = new RegExp( RegExp.escape( '^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$') );

这可能不是最有效的方法,但具有很强的可扩展性

requirements = [ /\d/, /[A-Z]/, /[a-z]/, /^.{6,20}$/ ];

function passwordValid( password ) {
    var i = requirements.length;

    while( i-- ) {
        if( !requirements[i].test( password ) ) return false;
    }
    return true;
}

请不要对最大长度设置限制。没有真正的理由放弃数量/案例要求和最大长度要求。他们不工作,也从未工作过。还可以看到你可以在这上面摆弄你的正则表达式。永远不知道,你可能会发现一些有趣的东西…@zerkms谢谢你的评论。但这不是我确定的主要问题。我喜欢连环画@Deestan。。。如此真实