同时不超过3个字母的正则表达式不应接受1a1a1a1a1

时间:2015-02-25 11:42:38

标签: javascript jquery regex

不应接受:1a1a1a1a1,aaaa11111,2222aaaa 只允许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;
}

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

Regular expression visualization

Debuggex Demo

通过添加其他(?!...)(?=...) lookaround,您可以轻松添加更多要求。

答案 2 :(得分:1)

^(?!.*(.)(?:.*\1){3,}).*$

试试这个。参见demo.looahead确保任何角色都不会超过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.
}

答案 3 :(得分:1)

你可以这样做:

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}是一个非捕获组,(它什么都不做,它的唯一任务是将其他标记放在一起,然后你可以将量词应用于所有组。) < / LI>
  • {{1}}表示一组零个或多个非字母后跟一个字母并重复4次

答案 4 :(得分:0)

我瘦了这可能是你要找的东西:

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

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