【问题标题】:regular expression with no more than 3 alphabets concurrently should not accept 1a1a1a1a1同时不超过 3 个字母的正则表达式不应接受 1a1a1a1a1
【发布时间】:2015-02-25 11:42:38
【问题描述】:

不应接受:1a1a1a1a1, aaaa11111 ,2222aaa33a 任何地方只允许 3 个字符 不允许超过 3 个 我尝试如下但失败了

var patt = new RegExp("([A-Za-z]){4}");
var result = patt.test(DLnumber);
if (result == true) {
    alert("No more than three alphabets are allowed");
    return false;
}

【问题讨论】:

    标签: javascript jquery regex


    【解决方案1】:

    您的正则表达式需要考虑字母之间的非字母。我会用这个正则表达式来做到这一点:

    ^(?!.*([a-z].*){4,}).*$
    

    Debuggex Demo

    这样,您可以通过添加另一个(?!...)(?=...) lookaround 轻松添加更多要求。

    【讨论】:

      【解决方案2】:
      ^(?!.*(.)(?:.*\1){3,}).*$
      

      试试这个。查看演示。后退确保任何字符不存在超过 3 次。

      https://regex101.com/r/wU7sQ0/10

      var re = /^(?!.*(.)(?:.*\1){3,}).*$/gm;
      var str = '1a1a1a1a1\naaaa11111\n2222aaa33a\nsadsada';
      var m;
      
      while ((m = re.exec(str)) != null) {
      if (m.index === re.lastIndex) {
      re.lastIndex++;
      }
      // View your result using the m-variable.
      // eg m[0] etc.
      }
      

      【讨论】:

      • 我认为这太复杂了。如果我们认为 OP 的模式是[A-Za-z],我认为“字母”是任何字符。我猜我们只是被要求检查是否有超过三个字符,这可以通过检查/[a-z]/gi的匹配数来轻松测试
      【解决方案3】:
         function testNumberOfChar(str){
          var match= str.match(/[a-zA-Z]/g);
          if( match && match.length > 3 ){
             alert("No more than three alphabets are allowed"); 
             return false;
          }
          return true;
         }
      

      【讨论】:

        【解决方案4】:

        你可以这样做:

        if (/^(?:[^a-z]*[a-z]){4}/i.test(DLnumber)) {
            alert("No more than three alphabets are allowed");
            return false;
        }
        
        • i 修饰符使模式不区分大小写,因此对于所有模式,[a-z][a-zA-Z][^a-z][^a-zA-Z] 相同。
        • ^ 是字符串开头的锚(不需要,但可以提高性能,特别是当模式必须失败时)
        • (?:...) 是一个非捕获组,(它什么都不做,它唯一的任务是将其他标记放在一起,然后你可以对所有组应用一个量词。)
        • (?:[^a-z]*[a-z]){4} 表示一组零个或多个非字母后跟一个字母并重复 4 次

        【讨论】:

          【解决方案5】:

          我认为这可能是您想要的:

          if (str.replace(/[^a-z]/gi, "").length>3) {
              alert("No more than three alphabets are allowed");
              return false;
          }
          

          它计算字符串中的字母字符...

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-24
            • 2022-11-24
            • 1970-01-01
            • 2021-11-30
            • 1970-01-01
            相关资源
            最近更新 更多