创建正则表达式数组

Creating Array of Regular Expressions Javascript

本文关键字:数组 正则表达式 创建      更新时间:2023-09-26

我想创建一个函数,将密码与一些常见的愚蠢密码进行比较,以便用户不能选择其中的一个,但是到目前为止我编写的函数,当放在脚本标记之间时,不会导致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 !会通过许多看似强有力的政策,但需要几秒钟才能破解。

唯一有效的黑名单是包括解密技术使用的所有单词列表和组合脚本,这将意味着用户等待几分钟/小时/天来验证他们的密码是否足够好。

我知道这并没有回答具体的问题,但它确实试图建议什么是有效的密码验证,什么不是有效的密码验证。