如何改进Java密码验证正则以满足无连续重复字符要求?
改进密码验证正则以支持禁止连续重复字符
你的原有正则已经覆盖了前4项密码要求,但缺少第5项「禁止连续重复字符」的校验。只需在原有正则基础上添加一个负向预查规则即可实现完整验证,改进后的正则如下:
^((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%&*])(?!.*(.)\1))
关键改进点说明:
- 保留原有4个正向预查规则,确保密码包含数字、小写字母、大写字母和指定特殊字符
- 新增的
(?!.*(.)\1)是核心:(?!...)是负向预查,意思是「后面不能出现指定模式的内容」(.)捕获任意单个字符\1引用刚才捕获到的字符,组合起来就是「连续两个相同字符」.*表示这种连续重复的组合可以出现在密码的任意位置
可选扩展:
如果需要限制密码长度(比如8-16位),可以在正则末尾加上长度限定:
^((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%&*])(?!.*(.)\1)){8,16}$
内容的提问来源于stack exchange,提问作者Montana
相关产品推荐
相关产品推荐

