一个正则卡了很久,去网上搜 js 字符串转正则
大家都会让使用eval或者new RegExp(str);
道理都懂 但是实际使用会有问题;
正则如下:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}/
①eval方式现在大部分工程已经废弃,如果使用会有安全隐患。
②new RegExp方式有小坑,如果你直接这样使用
const str =
'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}';
const passwordPatternF = new RegExp(str);
不能用,new RegExp会把\d 中的\ 给干掉。实际你得到的正则是这样的
/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&]{8,}/
用文件比对才发现这个问题,搜了搜其实 new RegExp 要给/d前再加一个/。
const str =
'^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&])[A-Za-z\\d$@$!%*?&]{8,}';
const passwordPatternF = new RegExp(str);
这样就可以了。
你学废了嘛!