提问者:小点点

javascript eval无法理解字符串中的某些正则表达式?


eval似乎根本不理解regex

我得到了这个string来检查输入字段中输入的year

正则表达式应该匹配类似于:2010年,1980年或1900到2099年之间的任何年份。

regex:^(1920)\d{2}$在原始JavaScript中运行良好,例如:

var testStr = /^(19|20)\d{2}$/.test(2013) //logs true

但是teststr2=eval(“/^(1920)\d{2}$/”)。test(2013)//logs false

请参阅Fiddle:http://jsfiddle.net/zq30puzm/

目前正在以下方面使用:

"getYear":{
                        "regex":"/^(19|20)\d{2}$/",
                        "alertText":"* Invalid Year"
},

当输入的数据是值得输入的数据时,它继续打印错误事件。

问题可能是什么?

欢迎提出任何建议。

小提琴:http://jsfiddle.net/zq30puzm/


共1个答案

匿名用户

在字符串版本中,需要转义反斜杠。

var testStr2 = eval("/^(19|20)\\d{2}$/").test(2013);

在正则表达式文本中,转义反斜杠是不必要的(除非您需要文本反斜杠),但是在字符串中,\d只会变成字符d而不转义。

值得注意的是,确实应该不惜一切代价避免eval。 您不太可能需要它,如果不小心确保它不会被滥用到恶意的目的,使用它总是很危险的。 此外,如果您的正则表达式格式错误或发生其他错误,您将不会得到有用的错误消息,它很可能只是以奇怪的方式中断。

如果可以,请使用正则表达式文字! 它们方便可靠,你不必做任何不必要的逃生:

/^(19|20)\d{2}$/.test(2013);

如果需要字符串中的正则表达式,请使用构造函数而不是eval。 它会做同样的事情,但更安全。

new RegExp("^(19|20)\\d{2}$").test(2013);