我正在尝试编写一个正则表达式来验证必须满足以下条件的用户名:
- 需要是字母数字,至少有一个数字
- 没有符号或空格(只有字母数字(
- 没有连续的相同字符,且一行中有两个以上
- 至少包含8个字符
这里的东西我已经尝试
^(?=.*d)((.)2?(?!2))+.{8,}$
aaa->不匹配。
jjumper13->火柴
@aabfrff->不匹配。
abdirahm1->火柴
尝试并犯错->不匹配。
666abcde->不匹配。
bBb123bBb->不匹配。
您几乎做到了,您可以使用负前瞻来使特定模式失败,只需记住明确允许的字符-以下是Regex101细分。
const re = /^(?=.*d)(?!.*(.)11)[a-zd]{8,}$/i
const controlTests = [
'abcd0ef', // fail, too few
'abcdefgh', // fail, no digit
'abcd0efg', // pass
'aBcD0eFg', // pass
'abcd!0ef', // fail, invalid char
'aAbBcC00', // pass
'aAbBc000', // fail, too many consecutive (number)
'aAbBbC00' // fail, too many consecutive (letter / case-insensitive)
]
const providedTests = [
'aaa', // fail
'jjumper13', // pass
'@aabfrff', // fail
'abdirahm1', // pass
'tryand err', // fail
'666abcde', // fail
'bBb123bBb' // fail
]
;[].concat(controlTests, providedTests)
.forEach(input => console.log(`"${input}"`, re.test(input)))
它有作为正则表达式吗?我怀疑将其作为几个单独的规则来维护会更容易(无论如何,这些规则可能在内部使用regex,但每一个都应该更简单(。