后端返回一个正则表达式字符串,前端该怎么使用?
改项目代码的时候发现一个没见过的函数,场景是后端返回了一个正则表达式字符串,前端使用这个字符串去校验一个值:
eval('/^[1-9]\d*\.\d+|[1-9]\d*$/').test(0.1)
大致是这么个用法。
好奇查了下这个eval函数,看到有意思的一个解释:
那就不用这个函数看看怎么写吧。
换成这么写:new RegExp('/^[1-9]\d*\.\d+|[1-9]\d*$/').test(0.1)。
神奇的一幕出现了:
结果并不相同。
找原因:
试一下,果然解决了:
这就有意思了。 优化代码,去除调首尾的斜杠:
var str = '/^[1-9]\d*.\d+|[1-9]\d*/g, '')); // 去掉斜杠并创建正则表达式对象 regexp.test(0.1); // 返回true