正则表达式使用任何字符的最小3

时间:2016-12-09 18:21:51

标签: javascript regex

我正在创建密码验证,要求是如果使用某个字符,则必须使用3次,例如AAABBB,AABBAB或A999000AA。

我有一些东西可以将每个角色的使用限制为3次:^(?:(.)(?!(?:.*?\1){3}))*$

如何确保每个角色至少出现3次?

2 个答案:

答案 0 :(得分:4)

你可以这样做:

  1. 订购字符串(这会降低复杂性)
  2. /^(?:(.)\1{2})+$/测试匹配三元组 一个 更多次的正则表达式。
  3. 
    
    function isStringValid(s) {
      
      return !!s
        .split("")
        .sort()
        .join("")
        .match(/^(?:(.)\1{2})+$/)
      ;
    }
    
    
    /** IGNORE THE REST **/
    function ValidateCtrl() {
      var field = document.querySelector('#Test');
      var btn = document.querySelector('#Validate');
      
      function checkValue() {
        
        console.log('val', isStringValid(field.value));
      } 
      
      btn.addEventListener('click', checkValue);
    }
    
    document
      .addEventListener('DOMContentLoaded', ValidateCtrl)
    ;
    
    #Test { 
      margin-top: 20px;
      display: block;
    }
    
    <button type="button" id="Validate">Validate</button>
    <input id="Test" />
    &#13;
    &#13;
    &#13;

    更新

    如果您需要 at least 3 出现相同的字符:

    • /^(?:(.)\1{2,})+$/

    最后\w仅匹配[a-zA-Z0-9_]

    • /^(?:(\w)\1{2,})+$/

答案 1 :(得分:-1)

您可能会这样做:

&#13;
&#13;
    var password = 'AABBCCBACDDC',
        check = {},
        x;
    for (var i = password.length; i > 0; i--) {
        x = password[i - 1];
        check[x] = check[x] ? (check[x] + 1) : 1;
    }
    for (x in check) {
        if (check[x] != 3) {
            console.log('"' + x + '" occurs ' + check[x] + ' times!');
        }
    }
&#13;
&#13;
&#13;

编辑:简化,感谢@torazaburo。