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

如何用正则匹配≥8位含字母数字@#$%的密码?及正则问题排查

符合要求的密码正则表达式写法

要匹配**长度至少8位,允许包含字母、数字以及符号@#$%**的密码,正确的正则表达式写法如下:

pattern = re.compile(r'^[a-zA-Z0-9@#$%]{8,}$')

规则解释:

  • ^ 和 $:强制匹配整个字符串,避免只识别部分符合条件的子串
  • [a-zA-Z0-9@#$%]:明确允许的字符集合,包含大小写字母、数字和指定符号
  • {8,}:要求字符串总长度至少为8位

现有正则表达式的问题分析

你代码中的正则表达式 ^\w@#$%{8,} 存在以下关键错误,导致无法匹配给定的密码 12345abcd@#$%:

  1. 字符未分组,要求固定序列
    \w@#$% 表示字符串开头必须是一个单词字符(\w 包含字母、数字、下划线),紧接着必须依次出现 @、#、$ 三个符号。但你的密码中这些符号位于末尾,前面是连续的数字和字母,完全不符合这个固定序列要求。

  2. 量词作用范围错误
    {8,} 仅紧跟在 % 之后,意味着要求 % 符号至少出现8次,而非整个密码长度至少8位。你的密码里只有一个 %,显然不满足该条件。

  3. 包含未允许的字符
    \w 包含下划线 _,但你的需求并未允许该符号,会导致带下划线的无效密码被误匹配。

  4. 缺少结束锚定
    没有 $ 结尾,即使前面逻辑正确,也可能匹配到更长字符串的前缀部分(不过这不是导致当前匹配失败的主要原因)。

修正后的测试代码:

import re

pattern = re.compile(r'^[a-zA-Z0-9@#$%]{8,}$')
password = '12345abcd@#$%'

x = pattern.search(password)
print(x)  # 输出匹配对象,不再是None
print(len(password))  # 输出14,符合长度要求

内容的提问来源于stack exchange,提问作者itaykivsi זיו

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:27:26