在密码中至少检查4个不同的字符



我需要regex检查字符串(密码)是否包含:字母,数字,至少6个字符(长度)和(这是问题)至少4个不同的字符。

(密码只能包含字母或数字,但至少包含4个不同的字符)

到目前为止,我一直在使用这个,但它不能检查至少4个不同的字符

/^S(?=.*[A-Za-z])(?=.*d)[A-Za-zd]{6,}$/i

如果你有任何想法,请告诉我

假设字符串只能包含字母和数字,那么满足您要求的JavaScript正则表达式的示例如下:

const regex = /^(?=.*(.).*(?!1)(.).*(?!1|2)(.).*(?!1|2|3).)[a-zd]{6,}$/i;
console.log(regex.test('abc'));       // false
console.log(regex.test('abcbaa'));    // false
console.log(regex.test('abcdaa'));    // true

如果您不介意额外检查以使至少4个不同字符的部分更加灵活,您可以将您的模式与Set结合使用。

const regex = /^(?=[^a-zn]*[a-z])(?=[^dn]*d)[a-zd]{6,}$/i;
const check = (s) => regex.test(s) && (new Set(s)).size > 3;
[
"abc5",
"abcdef",
"123456",
"aaaaa1",
"aaaa12",
"abcbaa",
"abcdaa",
"aaa123",
"abc1aa",
"1112ab"
].forEach(s =>
console.log(`${s} --> ${check(s) ? "Match" : "No match"}`)
)

最新更新