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

密码正则表达式调整:仅拒绝包含恰好4位数字的密码

解决方案

要实现你的需求,只需修改正则中禁止连续数字的负向前瞻部分,将原来禁止所有4位及以上连续数字的规则,改为仅禁止恰好连续4位数字的情况。

修改后的正则表达式:

pattern = r"^(?=.*[A-Z]{2,})(?=.*[0-9])(?!.*(?<!\d)\d{4}(?!\d))(?!.*[\s]).*$"

规则拆解

  • (?=.*[A-Z]{2,}):确保密码包含至少2个连续大写字母,原规则保留。
  • (?=.*[0-9]):确保密码包含数字,原规则保留。
  • (?!.*(?<!\d)\d{4}(?!\d)):核心修改部分,意思是禁止出现前后非数字(或字符串首尾)的连续4位数字:
    • (?<!\d):断言当前位置前不是数字(确保这4位数字的开头前没有其他数字)
    • \d{4}:匹配4位数字
    • (?!\d):断言当前位置后不是数字(确保这4位数字的结尾后没有其他数字)
      这样一来,连续3位及以下、连续5位及以上的数字都会被允许,只有恰好连续4位的数字会被拒绝。
  • (?!.*[\s]):确保密码不包含空格,原规则保留。

测试代码

import re

s1 = 'annII#443'
s2 = 'annII#4343'
s3 = 'annII#43434'

pattern = r"^(?=.*[A-Z]{2,})(?=.*[0-9])(?!.*(?<!\d)\d{4}(?!\d))(?!.*[\s]).*$"

print(re.findall(pattern, s1))  # ['annII#443']
print(re.findall(pattern, s2))  # []
print(re.findall(pattern, s3))  # ['annII#43434']

测试结果符合预期:s1(3位连续数字)和s3(5位连续数字)通过匹配,s2(恰好4位连续数字)被拒绝。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:40:40