我想创建一个函数,将密码与一些常见的愚蠢密码进行比较,以便用户无法选择其中一个,但是我到目前为止编写的函数,当放在脚本标记之间时,不会导致 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/
附注您不必将所有单词放入数组中。您可以预先声明整个正则表达式,但我认为像这样将它们放入数组中可以使代码更具可读性,更易于维护。
也可能是这样的:
var unforgivable = /password|12345678|8675309|[a-z]{8,}|qwerty|asdfg|qazwsx|zxcvb|letmein|trustno1|omnicloud|monkey/i;
function unacceptable(pwd){
return unforgivable.test(pwd);
}
关于javascript - 创建正则表达式 Javascript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8207066/