我需要一个不能包含3个以上相同类型连续字符的正则表达式
ABC - valid
@@@ - valid
123 - valid
ABCD - not valid
ABC!@# - valid
答案 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)
)