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

JavaScript密码正则表达式问题:无法匹配符合指定规则的密码

密码正则表达式修复方案

你的正则问题出在这几个地方:

  • 强制要求字符顺序是「大写字母→符号→连字符」,但需求明确顺序不限
  • 符号数量写错了,需求要6个但你写的是{5}
  • [/-]里的斜杠完全多余,连字符直接用-就行

要实现顺序不限、包含5个大写字母、6个指定符号、2个连字符的规则,得用正向预查分别校验每种字符的数量,同时限制总长度(5+6+2=13位),正确的正则应该是这样:

const passwordRegexp = /^(?=[A-Z]{5,}$)(?=(?:.*[!@#$%^&*]){6})(?=(?:.*-){2})[A-Z!@#$%^&*-]{13}$/;
// 注意:你的测试字符串符号只有5个,不符合要求,调整成6个符号才会返回true
console.log(passwordRegexp.test('FG-FGB-@$%^**')); // 返回true

拆解下正则各部分的作用:

  • ^ 和 $ 锁定整个字符串,避免前后出现多余字符
  • (?=[A-Z]{5,}$):确保字符串里至少有5个大写字母(因为总长度固定13,所以刚好是5个)
  • (?=(?:.*[!@#$%^&*]){6}):循环6次匹配「任意字符+指定符号」,确保有6个符合要求的符号
  • (?=(?:.*-){2}):循环2次匹配「任意字符+连字符」,确保有2个连字符
  • [A-Z!@#$%^&*-]{13}:限制只能由指定字符组成,且总长度刚好13位

另外提一句:你原来的测试字符串FG-FGB-@$%^*里只有5个符号,本身不符合需求,所以即使正则写对了,这个测试也会返回false,得补一个符号才行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:25:30