一个正则卡了很久,去网上搜 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);
这样就可以了。
你学废了嘛!
本文探讨了在JavaScript中将字符串转换为正则表达式时遇到的问题,包括eval的安全隐患和new RegExp的陷阱。详细解释了new RegExp在处理特殊字符如d时的错误,并提供了正确的解决方案,即在d前添加反斜杠\以确保正则表达式的正确解析。通过实例展示了如何避免这些常见错误,帮助开发者更好地理解和使用JS创建复杂正则表达式。

被折叠的 条评论
为什么被折叠?



