我需要正则表达式
1)[A-Z][a-z][0-9]
必须包括大写&小写字母,数字和&特殊字符(+和 - 除外)。
2)序列中不超过2个相同的字符(例如,AAxx1224!@
或Password@123
或Google#12
是不可接受的。)
我试过这个,但不知道如何检查2个相同的字符。
^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^%*()!&=]).*$
答案 0 :(得分:1)
您可以添加额外的(?!.*(.)\1)
前瞻检查以禁止连续字符,并将最后的.*
替换为[^_+]*
(或[^-+]*
,如果您的意思是连字符)以匹配任何字符字符_
(或-
)和+
:
^(?!.*(.)\1)(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^*()!&=])[^_+]*$
^^^^^^^^^^ ^^^^^
(?!.*(.)\1)
前瞻匹配除了换行符之外的任何0+字符,然后逐个捕获这些字符并尝试在它们之后立即匹配相同的字符(使用\1
反向引用)。如果找到模式,则整个匹配失败。
请注意,[^_+]
也可能与换行符匹配,但我想这不是问题所在。无论如何,你可以在那里添加\n\r
以避免匹配它们。
请参阅regex demo