我想创建一个函数,将密码与一些常见的愚蠢密码进行比较,以便用户无法选择其中一个,但是到目前为止我编写的函数,当放在脚本任务之间时......
我想创建一个函数,将密码与一些常见的愚蠢密码进行比较,以便用户无法选择其中一个,但到目前为止,我编写的函数放在脚本标记之间时,会导致没有 javascript 被识别(由 Firebug)。我认为数组创建有问题。
function unacceptable(pwd){
var unforgivable = [
/password/gi, /*g matches any occurance of sequence, i checks case insensitive*/
/12345678/g,
/8675309/g,
/[a-z]{8,}/gi,
/qwerty/gi,
/asdfg/gi,
/qazwsx/gi,
/zxcvb/gi,
/letmein/gi,
/trustno1/gi,
/omnicloud/gi,
/monkey/gi];
for (var i=0; i<unforgivable.length; i++)
if(pwd.match(unforgivable[i])) return true;
return false;
}
您不需要循环测试每个单词,因为您可以将它们全部放入一个正则表达式中(用字符分隔 |
),然后让正则表达式引擎一次性查找其中任何一个。您可以这样做:
function unacceptable(pwd){
var unforgivable = [
"password",
"12345678",
"8675309",
"[a-z]{8,}",
"qwerty",
"asdfg",
"qazwsx",
"zxcvb",
"letmein",
"trustno1",
"omnicloud",
"monkey"
];
var re = new RegExp(unforgivable.join("|"), "i");
return re.test(pwd);
}
工作演示在这里: http://jsfiddle.net/jfriend00/cyVbC/
PS 您不必将所有单词放入数组中。您可以预先声明整个正则表达式,但我认为像这样将它们放入数组中可以使代码更易读且更易于维护。
也可能是这样的:
var unforgivable = /password|12345678|8675309|[a-z]{8,}|qwerty|asdfg|qazwsx|zxcvb|letmein|trustno1|omnicloud|monkey/i;
function unacceptable(pwd){
return unforgivable.test(pwd);
}