You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在现有密码验证Regex中实现禁止重复单词/模式的校验?

密码正则表达式添加重复模式校验的可行性解答

你的现有正则已经满足了除「禁止重复单词或模式」外的所有密码规则,可以在当前正则中添加相关校验逻辑,但需要根据你对「重复模式」的定义调整,以下分两种场景说明:

1. 禁止连续重复的子串(如xyzxyz、123123)

这种情况可直接在现有正则的负向前瞻中添加(?!.*(.{2,})\1),用来匹配并排除任何长度≥2的连续重复子串。

整合后的正则为:

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[.,!@#$%^+=_])(?!.*(.)\1)(?!.*(.{2,})\1).{8,20}$
  • 解释:(?!.*(.{2,})\1)会检查字符串中是否存在长度≥2的子串连续重复出现(比如xyzxyz里的xyz重复),一旦匹配到就判定密码无效。

2. 禁止非连续的重复单词/子串(如ProPersonPro、a1bca1bc)

如果要覆盖这种间隔重复的场景,需调整负向前瞻为(?!.*(.{2,}).*\1),用来排除任何长度≥2的子串在字符串中出现两次及以上(不管中间是否有其他字符)。

整合后的正则为:

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[.,!@#$%^+=_])(?!.*(.)\1)(?!.*(.{2,}).*\1).{8,20}$
  • 注意:这个规则会大幅增加正则的匹配开销,因为需要遍历所有可能的子串组合,对于长度接近20的密码,性能可能会有明显下降。

额外说明

你的现有正则已经通过(?!.*(.)\1)禁止了单个字符重复(比如AA、11),所以上面的规则只针对长度≥2的重复子串/单词。如果你的「重复模式」还包含其他特殊情况(比如固定长度的重复),可以进一步调整子串的长度范围(比如把.{2,}改成.{3,}来只禁止长度≥3的重复模式)。

内容的提问来源于stack exchange,提问作者programmerboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:53:12