You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

正则表达式仅允许指定特殊字符的密码验证问题

正则表达式仅允许指定特殊字符的密码验证问题

嘿,我明白你的问题所在了!你现在的正则只做了「必须包含哪些类型字符」的检查,但没做「只能包含这些允许的字符」的限制,所以只要满足了大写、小写、数字、指定特殊字符这几个条件,哪怕混入了不在列表里的字符(比如+),验证依然会通过。

问题出在哪?

你的现有正则:

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#\$%&\*])(?=.{8,})

这串代码里的所有(?=...)都是正向预查,它们只负责验证字符串里存在对应的字符类型,但并没有限制整个字符串的字符范围——也就是说,只要字符串里有大写、小写、数字、指定特殊字符,剩下的部分不管是什么字符,正则都不会管。

修正后的正则

我们只需要在正则的末尾加上「限定整个字符串只能由允许的字符组成」的规则,同时可以把长度检查和字符范围合并,让正则更简洁:

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#\$%&\*])[A-Za-z0-9!@#$%&*]{8,}$

各部分解释

  • ^:匹配字符串的开头
  • (?=.*[A-Z]):确保至少包含一个大写字母
  • (?=.*[a-z]):确保至少包含一个小写字母
  • (?=.*[0-9]):确保至少包含一个数字
  • (?=.*[!@#\$%&\*]):确保至少包含一个指定的特殊字符(注意$需要转义,因为它在正则里是结尾符号)
  • [A-Za-z0-9!@#$%&*]{8,}:限定整个字符串只能由这些允许的字符组成,且长度至少为8位
  • $:匹配字符串的结尾

测试案例

  • 符合要求的密码:MyPass123!abcDEF456# → 验证通过
  • 不符合要求的密码:MyPass123!+(包含了不在允许列表的+)、mypass123(缺少大写字母和特殊字符)→ 验证失败

备注:内容来源于stack exchange,提问作者badrobot15

火山引擎 最新活动