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

如何用正则表达式验证密码?现有正则部分场景验证失败,需符合指定规则

修正密码验证正则表达式的方案

咱们先揪出当前正则的问题:你的测试用例test.Test123验证失败,核心原因是你的正则没把.(点号)放进允许的特殊字符列表里,另外还有两个小疏漏:

  • 特殊字符集合里重复写了$([$@$!%*#?&]里的两个$)
  • &是HTML转义后的&,正则里直接写&就可以了

你的需求再明确下

允许输入字母、数字,必须至少包含一个特殊字符,长度限制在12-20字符之间。

两种修正方案

根据你的需求,我提供两种可选的正则版本:

方案一:明确指定允许的特殊字符

如果你只想开放特定的特殊字符(比如.、@、!这些常见的),用这个版本:

/^(?=.*[A-Za-z])(?=.*\d)(?=.*[.$@!%*#?&])[A-Za-z\d.$@!%*#?&]{12,20}$/

方案二:通用匹配所有非字母数字的特殊字符

如果不想限制特殊字符的种类(只要不是字母、数字、空格都算特殊字符),用这个更灵活的版本:

/^(?=.*[A-Za-z])(?=.*\d)(?=.*[^\w\s])[A-Za-z\d^\w\s]{12,20}$/

注:[^\w\s]表示匹配非单词字符(非字母、数字、下划线)且非空格的字符,涵盖绝大多数常见密码特殊字符。

正则各部分拆解(以方案一为例)

  • ^:匹配字符串的起始位置
  • (?=.*[A-Za-z]):正向预查,确保字符串里至少有一个大小写字母
  • (?=.*\d):正向预查,确保字符串里至少有一个数字
  • (?=.*[.$@!%*#?&]):正向预查,确保字符串里至少有一个指定的特殊字符(这里新增了.)
  • [A-Za-z\d.$@!%*#?&]{12,20}:匹配12到20个字符,允许的字符包括大小写字母、数字,以及指定的特殊字符
  • $:匹配字符串的结束位置

测试验证

  • test@Test123:包含字母、数字、@,长度符合要求,验证通过
  • test.Test123:包含字母、数字、.,现在可以正常验证通过
  • 不符合条件的案例(比如testtest123缺少特殊字符、test.Test12长度不足12)都会被正确拦截

如果需要新增其他允许的特殊字符,直接把它们加到两个方括号的特殊字符集合里就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:07:52