ReactJS密码验证问题:如何限制密码长度不超过8位?
修复密码正则验证的长度限制问题
嘿,我一眼就看出问题所在了——你的正则里用了(?=.{8,}),这是要求密码至少8位,但你的需求是密码长度不能超过8位,所以9位的密码自然会通过验证啦。
咱们直接修正正则就能搞定:
const strongRegex = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&*]).{1,8}$");
简单说下修改逻辑:
- 去掉了原来的
(?=.{8,})这个正向预查,换成直接在整个匹配规则里限定长度为.{1,8},意思是匹配1到8个任意字符 - 开头的
^和结尾的$确保整个密码字符串都被检查,不会出现部分匹配的漏网情况 - 之前的四个正向预查(小写、大写、数字、指定特殊字符)全部保留,保证密码的复杂度要求
如果你的需求其实是密码必须恰好是8位(而不是不超过),那只需要把.{1,8}改成.{8}就行:
const strongRegex = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&*]).{8}$");
现在再测试你的案例:
- "Abd1$bas"(8位):返回
true,符合预期 - "Abd1$bass"(9位):返回
false,完美符合你的需求啦
内容的提问来源于stack exchange,提问作者Mohammud Shahaparan Mojumder




