javascript eval无法理解字符串中的一些RegEx?

时间:2014-08-21 15:52:26

标签: javascript regex string eval

eval似乎根本不理解RegEx

我在输入字段中检查输入的string是否为YEAR

RegEx 应该match类似于: 2010 1980 1900 之间的任何年份 2099

RegEx ^(19|20)\d{2}$适用于原始javascript之类的内容:

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

但是testStr2 = eval("/^(19|20)\d{2}$/").test(2013) //logs false

请参阅小提琴: http://jsfiddle.net/zq30puzm/

这用于:

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

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

可能是什么问题?

任何建议都表示赞赏。

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

1 个答案:

答案 0 :(得分:11)

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

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

在正则表达式文字中,不需要转义反斜杠(除非你需要文字反斜杠),但在字符串中,\d只是变成了字符d而没有转义。


请注意,eval应该不惜一切代价避免。{1}}您不太可能需要它,并且在没有充分注意的情况下使用它总是危险的,以确保它不会被滥用于恶意目的。此外,如果您的正则表达式格式错误或发生其他错误,您将无法获得有用的错误消息,它可能会以奇怪的方式中断。

如果可以,请使用RegExp文字!它们既方便又可靠,您不必进行任何不必要的转义:

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

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

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