创建正则表达式数组
Creating Array of Regular Expressions Javascript
我想创建一个函数,将密码与一些常见的愚蠢密码进行比较,以便用户不能选择其中的一个,但是到目前为止我编写的函数,当放在脚本标记之间时,不会导致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;
}
您不需要循环来测试每个单词,因为您可以将它们全部放入一个正则表达式中(由|
字符分隔),并让regex引擎一次查找它们中的任何一个。你可以这样做:
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);
}
我喜欢使用Array.some
,只要有一个返回值为真,它就会停止遍历数组:
function unacceptable(pwd){
return [
/password/gi,
/12345678/g,
/8675309/g,
/[a-z]{8,}/gi,
/qwerty/gi,
/asdfg/gi,
/qazwsx/gi,
/zxcvb/gi,
/letmein/gi,
/trustno1/gi,
/omnicloud/gi,
/monkey/gi
].some(function(regexp){
return regexp.test(pwd);
});
}
后面有一个逗号。在javascript中不能使用逗号。
var unforgivable = new Array(
/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
)
在寻找其他东西时发现了这个,因为没有人提到过,所以需要提到。您不应该使用黑名单作为确保强密码的手段。这是一个维护漏洞,会导致更多不在你列表中的坏密码。执行强密码策略。
P4ssw0rd !会通过许多看似强有力的政策,但需要几秒钟才能破解。
唯一有效的黑名单是包括解密技术使用的所有单词列表和组合脚本,这将意味着用户等待几分钟/小时/天来验证他们的密码是否足够好。
我知道这并没有回答具体的问题,但它确实试图建议什么是有效的密码验证,什么不是有效的密码验证。
相关文章:
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 如何将正则表达式包含到字符串数组中
- 将数字数组转换为合适的正则表达式
- 数组上的正则表达式
- 用于验证十进制数的正则表达式
- 返回Javascript中给定正则表达式的文本范围数组
- Javascript if数组包含正则表达式字符串
- 使用正则表达式将字符串转换为javascript数组
- 使用jquery验证器插件为十进制数设置正则表达式
- 用于在字符串中查找十进制数的正则表达式
- 将正则表达式存储在数组中在 Javascript 中不起作用
- Javascript从某些元素中提取日期与匹配和正则表达式返回空数组
- jQuery 验证器正则表达式使用数组或变量
- 任意字符数的正则表达式不受限制,但应仅允许 12 个数字
- 十进制数的正则表达式
- 用于检查确定数的正则表达式
- 变量数组+正则表达式不能一起工作
- 带可选小数点的十进制数的正则表达式
- 用于验证具有固定范围的十进制数的正则表达式
- 关于数组/正则表达式的问题