Javascript 密码验证regexp
我正在尝试使用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
^(?=.*\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。。。如此真实