0

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

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

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

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

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

这可能吗?

4

4 回答 4

3

您可以使用字符串:

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

(反斜杠连接转义了特殊字符,因此正则表达式引擎按字面意思处理它们。)

于 2013-07-11T09:01:12.190 回答
2

是的,如果你使用RegExp() 构造函数,你可以传入一个字符串作为正则表达式。

var list = ['\\!', '\\@', '\\#', '\\%'];
var reg = new RegExp('(.*['+ list.join(',') + '].*['+ list.join(',') +'])');
if (reg.test("MySuperPassword!#_123")) {
    score += 5;
}
于 2013-07-11T09:02:22.140 回答
0

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

var list = "[\\!@#\\$%\\^&\\*\\?_~]";
var your_regex = new RegExp(".*" + list + ".*" + list);
if (your_regex.test(password)){
  score += 5;
}
于 2013-07-11T09:00:04.637 回答
0

为什么需要正则表达式?

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

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

小提琴

于 2013-07-11T09:06:20.883 回答