我正在研究使用jQuery密码强度指标,并找到了一个看起来合适的。
如果检测到特殊字符,它会增加密码强度分数:
if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)){ score += 5 ;}
但是我希望能够指定其他特殊字符,因为这些特殊字符列表在多个地方使用,我只想指定列表一次:
list = array(!,@,#,$,%,^,&,*,?,_,~,[,],{,},(,));
if (password.match(/(.*[list].*[list])/)){ score += 5 ;}
这可能吗?
答案 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++;
}