用户名的javascripts-regex,没有空格,没有符号,需要是字母数字,一行中的连续字母不能超过2个



我正在尝试编写一个正则表达式来验证必须满足以下条件的用户名:

  1. 需要是字母数字,至少有一个数字
  2. 没有符号或空格(只有字母数字(
  3. 没有连续的相同字符,且一行中有两个以上
  4. 至少包含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,但每一个都应该更简单(。

最新更新