检查字符串是否包含不超过2个重复字符的正则表达式是什么?

时间:2019-02-20 23:05:07

标签: regex

您好,我需要检查密码。密码中最多不能包含2个重复字符。

我的密码必须包含至少大写,小写,数字和特殊字符#?!@ $%^&*-

所以,如果我有例如这样的密码

Password123 $有效 密码123 $无效 Passssword123 $无效 PPaassword123 $$有效 PPaassword123 $$$无效

请帮助我 谢谢

3 个答案:

答案 0 :(得分:0)

我不确定如何使用相同的模式进行受限字符和重复字符验证,但是这两种模式将满足每种需求。要使用它们,请将您的密码字符串与模式进行比较,如果找到匹配项,密码将失败。

不是字母,数字或符号组“#?!@ $%^&*-”中的字符

[^\w#?!@$%^&*-]

字母重复3次以上

(.)\1{2,}

答案 1 :(得分:0)

要检查每种字符中的至少一种:

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[#?!@$%^&*-])([a-zA-Z0-9#?!@$%^&*-]+)$

要检查字符是否重复两次以上:

(?!(.)\1{2,})

所以将它们放在一起应该可以给您:

^(?!(.)\1{2,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[#?!@$%^&*-])([a-zA-Z0-9#?!@$%^&*-]+)$

答案 2 :(得分:0)

https://regex101.com/r/CtBM4B/2/

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[#?!@$%^&*-])((.)(?!\2\2))+$
  • ^ ... $-必须与整个字符串匹配
  • (?=.* X )-必须包含 X
    • (?=.*[A-Z])-A..Z
    • (?=.*[a-z])-a..z
    • (?=.*[0-9])-0..9
    • (?=.*[#?!@$%^&*-])-#?!@ $%^&*-
  • ( Y )+- Y 的一个或多个重复(捕获组1:\1
    • (.)-一切(捕获组2:\2
    • (.)(?!\2\2)-任何没有被自身跟随两次的事物

或者通过拉出最终条件来稍微提高效率:

https://regex101.com/r/CtBM4B/3/

^(?!.*(.)\1\1)(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[#?!@$%^&*-]).*$
  • (?!.*(.)\1\1)-不得包含任何字符的三个重复