我正在尝试使用正则表达式验证密码
^(?=.*\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')
最佳答案
这是因为\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}$') );
关于javascript - 密码验证正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13602645/