Javascript正则表达式字符匹配

时间:2013-07-11 08:58:42

标签: javascript regex

我正在研究使用jQuery密码强度指标,并找到了一个看起来合适的。

如果检测到特殊字符,它会增加密码强度分数:

if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)){ score += 5 ;}

但是我希望能够指定其他特殊字符,因为这些特殊字符列表在多个地方使用,我只想指定列表一次:

list = array(!,@,#,$,%,^,&,*,?,_,~,[,],{,},(,));
if (password.match(/(.*[list].*[list])/)){ score += 5 ;}

这可能吗?

4 个答案:

答案 0 :(得分:3)

您可以使用字符串:

var special = "!@#$%^&*?_~[]{}()".split('').join('\\');
if (password.match(new RegExp("(.*[" + special + "].*[" + special + "])")))...

(join-with-backslashes会转义特殊字符,因此它们会被正则表达式引擎逐字处理。)

答案 1 :(得分:2)

是的,如果您使用RegExp() constructor,则可以将字符串作为regexp传入。

var list = ['\\!', '\\@', '\\#', '\\%'];
var reg = new RegExp('(.*['+ list.join(',') + '].*['+ list.join(',') +'])');
if (reg.test("MySuperPassword!#_123")) {
    score += 5;
}

答案 2 :(得分:0)

您无需在正则表达式,中分隔字符:

var list = "[\\!@#\\$%\\^&\\*\\?_~]";
var your_regex = new RegExp(".*" + list + ".*" + list);
if (your_regex.test(password)){
  score += 5;
}

答案 3 :(得分:0)

为什么需要正则表达式?

var list  = ['!','@','#','$','%','^','&','*','?','_','~','[',']','{','}','(',')'],
    score = 0;

for (var i=list.length;i--;) {
    if ( password.indexOf(list[i]) ) score++;
}

FIDDLE