不应接受: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;
}
答案 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,}).*$
通过添加其他(?!...)
或(?=...)
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;
}
[a-z]
与[a-zA-Z]
和[^a-z]
相同,而[^a-zA-Z]
与^
相同。(?:...)
是字符串开头的锚点(不需要,但特别是在模式必须失败时提高性能) (?:[^a-z]*[a-z]){4}
是一个非捕获组,(它什么都不做,它的唯一任务是将其他标记放在一起,然后你可以将量词应用于所有组。) < / LI>
答案 4 :(得分:0)
我瘦了这可能是你要找的东西:
if (str.replace(/[^a-z]/gi, "").length>3) {
alert("No more than three alphabets are allowed");
return false;
}
它计算字符串中的字母字符...