RegEx匹配相同类型的字符

时间:2016-11-30 07:19:07

标签: javascript regex

我需要一个不能包含3个以上相同类型连续字符的正则表达式

ABC - valid
@@@ - valid
123 - valid
ABCD - not valid
ABC!@# - valid

2 个答案:

答案 0 :(得分:3)

使用

if (!/[a-z]{4}|\d{4}|[^a-z\d]{4}/i.test(s)) { console.log("valid"); } 

请参阅regex demo

/[a-z]{4}|\d{4}|[^a-z\d]{4}/i正则表达式将以不区分大小写的方式匹配(由于/i)4个连续的ASCII字母([a-z]{4})或4个连续的数字(\d{4})或4 ASCII字母和数字([^a-z\d]{4})以外的字符。

只要找到匹配项,!/regex/.test()检查就会返回false。

var strs = ['ABC','@@@','123','ABC!@#','ABCD'];
var rx = /[a-z]{4}|\d{4}|[^a-z\d]{4}/i;
for (var s of strs) {
  if (!rx.test(s)) {
    console.log(s, ": valid"); 
  }  else  {
     console.log(s, ": invalid"); 
  }
}

答案 1 :(得分:0)

您可以根据您的类型拆分字符串,然后检查长度是否小于3,我认为只有RegExp才能实现这一点。

const tests = [
  'ABC',
  '@@@',
  '123',
  'ABCD',
  'ABC!@#'
]

function validate(string){
  return string.split(/([A-Z]+|[0-9]+|@+|\W+)/)
    .every(str => str.length <= 3)
}

console.log(
  tests.map(validate)
)