正则关于特殊字符下划线_的 校验
问题:最近测试提了个关于密码格式校验的bug,要求 “输入8-16位字符,需包含字母、数字、特殊字符三种类型”
密码都符合要求,但是含有_就提示错误
定位问题:应该是正则的有问题
解决:
在正则表达式 /(?=.[a-z])(?=.[A-Z])(?=.\d)(?=.[^\w\s]).{8,16}/ 中,[^\w\s] 表示匹配任何非单词字符和非空白字符。这里的 w 代表单词字符,即字母、数字及下划线 _,而 \s 代表空白字符。因此,[^\w\s] 将匹配非字母、非数字、非下划线和非空白的字符。
问题在于,正则表达式中的特殊字符列表没有包含下划线 。要解决这个问题,可以将正则表达式修改为包含下划线 _ 作为特殊字符。但是,由于 _ 在正则表达式中是一个特殊字符,代表字面量下划线,所以需要使用两个反斜杠 \ 来表示字面量下划线。
最终修改后的正则
const reg = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z\d\s]).{8,16}/