Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 - Fatal编程技术网

Javascript中用于密码验证的正则表达式

Javascript中用于密码验证的正则表达式,javascript,regex,Javascript,Regex,我试图创建一个正则表达式,在用户创建密码时验证该密码。密码必须是: 至少6个字符长,可以是任何类型的字符 使用的每个字符都需要在密码中精确显示3次 好例子: AAABBB ABABBA +++=== +ar++arra myyymm /Arrr/AA/ 有人知道哪个正则表达式可以实现这一点吗?在测试密码之前,您可以通过对密码进行排序来轻松操作: $('button')。在('click',function()上{ var s=$('#password').val(); var split=s

我试图创建一个正则表达式,在用户创建密码时验证该密码。密码必须是:

  • 至少6个字符长,可以是任何类型的字符
  • 使用的每个字符都需要在密码中精确显示3次
  • 好例子:

    AAABBB
    ABABBA
    +++===
    +ar++arra
    myyymm
    /Arrr/AA/
    

    有人知道哪个正则表达式可以实现这一点吗?

    在测试密码之前,您可以通过对密码进行排序来轻松操作:

    $('button')。在('click',function()上{
    var s=$('#password').val();
    var split=s.split(“”.sort().join(“”);
    如果(/^(?:()\1{2}(?!\1)){2,}$/.test(split))
    console.log(“有效密码”);
    其他的
    console.log(“无效密码”);
    })
    
    
    测试me
    对于第一个选项,您必须在不使用正则表达式的情况下进行检查

    var str = "your password";
    var pattern = /(.)(.*\1){3}/;
    if(str.length >= 6){
       // It will give you boolean as return
       // If it is match then it return true else false
       pattern.test(str);
    }
    

    另一种解决方案,因为您允许使用代码(您的问题暗示您不会这样做;)

    使用下面的函数(如
    verifyPass
    )应该可以做到这一点。它逐渐用空字符串替换任何有效的三个字母组合。检查是否在多个迭代(至少6个字符)中完成了此操作,并以空字符串结尾,这意味着它是一个有效的密码

    功能验证通过(通过){
    变量re=/^((?:(?!\1)。)*)\1((?:(?!\1)。*)\1((?:(?!\1)。*)$/,
    cnt=0;
    while(重新测试(通过)){
    通过=通过。更换(重新命名为“$2$3$4”);
    cnt++;
    }
    返回过程==''&&cnt>1;
    }
    变量测试项=[
    '123123123',
    "AAABBB",,
    “aaabbaaa”,
    “Qwerty”,
    “阿巴巴”,
    '+++===',
    '111',
    "qweqwd",,
    “sdcjhsdfkj”,
    “+ar++arra”,
    “Myyyms”,
    “/Arrr/AA/”
    ];
    测试项目forEach(功能(项目){
    文件。写入(“”+项+”
    );
    });我可以给你一个答案,但请先解释一下为什么你希望密码的熵比需要的小三倍…?再仔细想想,我不太确定这是否可以用一个正则表达式来实现;绝对不能使用功能非常有限的JavaScript正则表达式。您需要两个步骤:首先对密码进行排序,然后使用正则表达式检查每个字符是否正好出现三次。这与正则表达式不太匹配(而且密码方案很糟糕)。如果你的目标是ES6,你可以把所有的角色扔到地图上数一数。效率较低的是,您可以对字符串进行排序,然后检查它是否包含3次运行(您可以为其生成一个正则表达式,但它比几乎任何其他选择都要复杂),没有人会要求这样愚蠢的限制password@sabithpocker-几乎所有密码强度检查都已过时且无用。如今,好密码的条件只有两个:足够长(越多越好)和抵抗字典攻击(这是问题本身)。“使用大写字母、小写字母、数字和特殊符号”这样的提示没有任何价值,即使对普通黑客来说也是如此。这并不能说明6个字符的总长度,对吗?至少6个字符并不完全是6:):@thomasayubt这将验证密码,如
    AAAAAA
    -它只检查3的倍数,不是每个字符都有三个实例。您应该使用提供的一些测试表达式来尝试。