我正在尝试使用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')
答案 0 :(得分:1)
试试这个:
var re = /^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$/
然后这个:
var re2 = new RegExp('^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$')
然后你只需检查结果......你会发现在re2中\d
没有正确转义为正则表达式而是为字符串转义。
编辑: 找到Javascript: RegExp not working no matter what my expression is
答案 1 :(得分:1)
这是因为\
中的\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.escape = function(s) {
return s.replace( /[-\/\\^$*+?.()|[\]{}]/g, "\\$&" );
};
var x = new RegExp( RegExp.escape( '^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$') );
答案 2 :(得分:1)
可能不是最有效的方式,但可以扩展。
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;
}