Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建正则表达式数组Javascript_Javascript_Regex_Arrays_Passwords - Fatal编程技术网

创建正则表达式数组Javascript

创建正则表达式数组Javascript,javascript,regex,arrays,passwords,Javascript,Regex,Arrays,Passwords,我想创建一个函数,将密码与一些常见的愚蠢的密码进行比较,这样用户就无法选择其中一个,但是我迄今为止编写的函数,当放在脚本标记之间时,不会导致识别javascript(Firebug)。我认为数组的创建是错误的 function unacceptable(pwd){ var unforgivable = [ /password/gi, /*g matches any occurance of sequence, i checks case insensitive*/ /12

我想创建一个函数,将密码与一些常见的愚蠢的密码进行比较,这样用户就无法选择其中一个,但是我迄今为止编写的函数,当放在脚本标记之间时,不会导致识别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;
} 
功能不可接受(pwd){
var不可原谅=[
/password/gi,/*g匹配任何序列,我检查不区分大小写*/
/12345678/g,
/8675309/g,
/[a-z]{8,}/gi,
/qwerty/gi,
/asdfg/gi,
/qazwsx/gi,
/zxcvb/gi,
/letmein/gi,
/信托编号1/gi,
/omnicloud/gi,
/猴子/gi];

对于(var i=0;i您有一个尾随逗号。您不能在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
)

您不需要循环来测试每个单词,因为您可以将它们全部放在一个正则表达式中(由
|
字符分隔),并让正则表达式引擎一次查找其中任何一个。您可以这样做:

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);
}
在此进行工作演示:

另外,你不必把所有的单词都放在一个数组中。你可以预先声明整个正则表达式,但我认为这样把它们放在数组中会使代码更可读,更易于维护

也可能是这样的:

var unforgivable = /password|12345678|8675309|[a-z]{8,}|qwerty|asdfg|qazwsx|zxcvb|letmein|trustno1|omnicloud|monkey/i;

function unacceptable(pwd){
    return unforgivable.test(pwd);
}
我喜欢使用,它将在一个返回值为true时停止遍历数组:

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);
    });
}

发现此内容是为了寻找其他内容,因为没有其他人提到过,所以需要提及。您不应使用黑名单作为确保强密码的手段。这是一个维护漏洞,会导致更多不在您列表中的坏密码。请改为强制执行强密码策略

P4ssw0rd!将通过许多伪强策略,但需要几秒钟才能破解

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


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

更正:您不能在ES3中使用尾随逗号。这是从ES5开始允许的。我的错-这对数组/对象文字(他可能应该使用)是正确的,而不是对函数调用。使用[]创建数组,pwd.match(ptrn)对于匹配正则表达式,缺少for循环(),循环中的ptrn将是数组索引,而不是值,您可能应该切换到常规的for循环或添加hasOwnProperty检查,并在函数外部创建正则表达式数组,而不是每次调用函数时都重新创建它。此外,g标志在这里非常无用。@shesek I修复了循环,但它说匹配不是methodI不知道即使是空字符串也是一个好密码。我同意可读性,这就是为什么我将它们放在数组中。我遇到了pwd没有匹配方法的问题,但调用
toString()
解决了这个问题。感谢您的帮助!从
.match()
切换到
.test()
此处哪个更合适。