密码强度校验正则误报求助:无特殊字符密码被判定有效
密码正则校验误报问题分析
你的正则规则出现误报的核心问题在于特殊字符集的写法错误:
在正则的字符集[#?!@$%^&*+-_]中,+-_这部分被解析成了ASCII字符范围(从+到_的所有字符),而非单独的+、-、_三个符号。
ASCII编码里,+的码值是43,-是45,_是95,这个范围内包含了:
- 数字0-9(码值48-57)
- 大写字母A-Z(码值65-90)
所以你的特殊字符预查(?=.*[#?!@$%^&*+-_])实际上会匹配密码里的数字或大写字母,导致不含特殊字符的Abcde0927也能通过校验。
修复方案
要解决这个问题,需要把-放在字符集的开头或结尾,或者用反斜杠转义,让它被当作普通字符处理:
// 方案1:把-放在字符集末尾 const re = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[#?!@$%^&*+_-]).{8,}$/ // 方案2:转义- const re = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[#?!@$%^&*+\-_]).{8,}$/
调整后,字符集只会匹配你指定的特殊符号,不会包含数字和字母,就能正确校验密码是否符合要求了。
内容的提问来源于stack exchange,提问作者Wt.N
相关产品推荐
相关产品推荐

