我想创建一个功能,将密码与一些常见的愚蠢的密码进行比较,以便用户无法选择其中的一个,但是当我在脚本标签之间放置时,我已经写过的功能导致不能识别
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(pwd.match(re) != null); }
工作演示:http://jsfiddle.net/jfriend00/cyVbC/3/
附:你不必把所有的词都放到一个数组中.您可以预先声明整个正则表达式,但是我认为将它们放在数组中,这样可以更容易地维护可读的代码.
也可能是这样的:
var unforgivable = /password|12345678|8675309|[a-z]{8,}|qwerty|asdfg|qazwsx|zxcvb|letmein|trustno1|omnicloud|monkey/i; function unacceptable(pwd){ return(pwd.match(unforgivable) != null); }