8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

创建正则表达式数组 Javascript

dfeva 2月前

44 0

我想创建一个函数,将密码与一些常见的愚蠢密码进行比较,以便用户无法选择其中一个,但是到目前为止我编写的函数,当放在脚本任务之间时......

我想创建一个函数,将密码与一些常见的愚蠢密码进行比较,以便用户无法选择其中一个,但到目前为止,我编写的函数放在脚本标记之间时,会导致没有 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;
} 
帖子版权声明 1、本帖标题:创建正则表达式数组 Javascript
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由dfeva在本站《regex》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 在寻找其他东西时发现了这一点,由于没有其他人提到它,所以需要提一下。您不应该使用黑名单作为确保强密码的手段。这是一个维护漏洞,会导致更多不在您的列表中的坏密码。相反,应实施强密码策略。

    P4ssw0rd!可以通过许多伪强力策略,但破解需要几秒钟。

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

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

  • 我的错 - 这对于数组/对象文字(他应该使用)来说是正确的,但不适用于函数调用。

  • 您有一个尾随逗号。您不能在 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
    )
    
  • 我喜欢使用 Array.some ,只要一个返回值为 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);
        });
    }
    
  • 我同意可读性,这就是我将它们放在数组中的原因。我遇到了 pwd 没有 match 方法的问题,但对其调用 toString() 解决了这个问题。谢谢您的帮助!

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

    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/

    PS 您不必将所有单词放入数组中。您可以预先声明整个正则表达式,但我认为像这样将它们放入数组中可以使代码更易读且更易于维护。

    也可能是这样的:

    var unforgivable = /password|12345678|8675309|[a-z]{8,}|qwerty|asdfg|qazwsx|zxcvb|letmein|trustno1|omnicloud|monkey/i;
    
    function unacceptable(pwd){
        return unforgivable.test(pwd);
    }
    
  • 并在函数外部创建正则表达式数组,而不是每次调用函数时都重新创建它。此外,g 标志在这里几乎没用。

  • 使用 [] 创建数组,使用 pwd.match(ptrn) 匹配正则表达式,您的 for 循环缺少 (),循环中的 ptrn 将是数组索引,而不是值,您可能应该切换到常规 for 循环或添加 hasOwnProperty 检查

返回
作者最近主题: