我正在创建密码验证,要求是如果使用某个字符,则必须使用3次,例如AAABBB,AABBAB或A999000AA。
我有一些东西可以将每个角色的使用限制为3次:^(?:(.)(?!(?:.*?\1){3}))*$
如何确保每个角色至少出现3次?
答案 0 :(得分:4)
你可以这样做:
/^(?:(.)\1{2})+$/
测试匹配三元组 一个 更多次的正则表达式。
function isStringValid(s) {
return !!s
.split("")
.sort()
.join("")
.match(/^(?:(.)\1{2})+$/)
;
}
/** IGNORE THE REST **/
function ValidateCtrl() {
var field = document.querySelector('#Test');
var btn = document.querySelector('#Validate');
function checkValue() {
console.log('val', isStringValid(field.value));
}
btn.addEventListener('click', checkValue);
}
document
.addEventListener('DOMContentLoaded', ValidateCtrl)
;

#Test {
margin-top: 20px;
display: block;
}

<button type="button" id="Validate">Validate</button>
<input id="Test" />
&#13;
如果您需要 at least 3
出现相同的字符:
/^(?:(.)\1{2,})+$/
最后\w
仅匹配[a-zA-Z0-9_]
:
/^(?:(\w)\1{2,})+$/
答案 1 :(得分:-1)
您可能会这样做:
var password = 'AABBCCBACDDC',
check = {},
x;
for (var i = password.length; i > 0; i--) {
x = password[i - 1];
check[x] = check[x] ? (check[x] + 1) : 1;
}
for (x in check) {
if (check[x] != 3) {
console.log('"' + x + '" occurs ' + check[x] + ' times!');
}
}
&#13;
编辑:简化,感谢@torazaburo。