密码正则表达式生成器与测试器
按规则(长度、小写、大写、数字、符号、禁止空格、禁止重复)生成适用于 JavaScript、PHP、Python、Java、.NET 或 HTML 的密码校验正则表达式。
组成规则只是衡量强度的薄弱指标,长度才最重要。NIST SP 800-63B 建议至少 8 个字符(单因素认证为 15 个),至少允许 64 个字符,并通过比对已泄露密码列表而不是要求字符类型来检查。
| 密码 | 结果 | 原因 |
|---|---|---|
| Passw0rd! | 通过 | — |
| password | 未通过 | 缺少大写字母,缺少数字,缺少符号 |
| Sh0rt! | 未通过 | 太短(6 个字符) |
| Aaa111!!!x | 未通过 | “111”重复 |
| Good Pass1! | 未通过 | 含有空格 |
| Tr0ub4dor&3 | 通过 | — |
注册表单通常用正则表达式来强制执行密码规则:最小长度、至少一个小写字母、一个大写字母、一个数字和一个符号、不含空格。手写这样的模式,需要正确地叠加多个先行断言,并针对每种语言转义符号。勾选你需要的规则,即可得到现成的正则表达式,以及适用于 JavaScript、PHP、Python、Java、C# 或 HTML pattern 属性的代码;再粘贴示例密码,就能看到哪些通过、各自违反了哪条规则。
使用方法
- 设置最小和最大长度。
- 勾选必须出现的字符类型;如果想限定符号的范围,请列出允许的符号。
- 选择是否禁止空格和连续三次重复。
- 选择语言并复制代码。
- 输入测试密码(每行一个)以检查规则。
计算公式
^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[符号])(?!.*\s)(?!.*(.)\1\1).{最小,最大}$
每个 (?=.*X) 都是要求某处必须出现 X 的先行断言;(?!.*\s) 禁止空白,(?!.*(.)\1\1) 禁止同一字符连续出现三次。最后一部分限定长度(勾选“只允许”时则限定允许的字符)。符号会针对各语言转义:JavaScript(u 标志)、PCRE、Python、Java 和 .NET 会转义 \ ] [ ^ -,而以 v 标志编译的 HTML pattern 属性则需要转义大多数标点。
示例
使用默认规则(8–64 个字符、四种类型都要有、不含空格、不得连续三次重复)时,6 个示例中有 2 个通过:Passw0rd! 和 Tr0ub4dor&3。“password”缺少大写字母、数字和符号;“Sh0rt!”只有 6 个字符;“Aaa111!!!x”中 1 和 ! 各重复了三次;“Good Pass1!”含有空格。
常见问题
只靠正则表达式就能让密码安全吗?
不能。它只强制格式。长度远比字符类型重要,NIST SP 800-63B 建议把新密码与已泄露密码列表比对,并允许使用很长的密码短语。务必在服务器端校验,而不只是在浏览器里。
为什么用 \A 和 \z 而不是 ^ 和 $?
在 PCRE、Python、Java 和 .NET 中,$ 也会匹配末尾换行符之前的位置,所以“Passw0rd!\n”会蒙混过关。\z(Python 中是 \Z,PHP 中是带 /D 的 $)只会在真正的末尾匹配。
emoji 和带重音的字母怎么计数?
带 u 标志的 JavaScript、带 /u 的 PHP 和 Python 把每个码点算作一个;Java 和 .NET 按 UTF-16 单元计数,因此一个 emoji 算作两个。é 这样的字母不在 a–z 范围内,所以在默认的符号规则下会被当作符号。
资料来源
最后更新:
包含这些输入的页面地址: https://kakao.mobile/zh/tools/password-regex-tool/
引用此工具
kakaoCalc. (2026, November 8). 密码正则表达式生成器与测试器. https://kakao.mobile/zh/tools/password-regex-tool/
“密码正则表达式生成器与测试器.” kakaoCalc, 8 Nov. 2026, kakao.mobile/zh/tools/password-regex-tool/.