密码验证正则表达式

时间:2012-11-28 10:13:33

标签: 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,}$')).test('aaAA112')

3 个答案:

答案 0 :(得分:1)

在你的JS控制台(firebug或其他)中

试试这个:

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;
}