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

Eri*_*est 3 javascript regex string eval

eval似乎不明白RegEx的.

我得到string了检查输入字段YEAR中的输入.

正则表达式应该match是这样的:2010,1980年或之间的任何年份1900年,以2099年.

RegEx:^(19|20)\d{2}$适用于以下原始产品javascript:

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

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

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

这被用于:

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

输入数据是值得的时,它会继续打印Error事件.

可能是什么问题?

任何建议表示赞赏.

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

Ale*_*ing 11

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

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

在正则表达式文字中,转义反斜杠是不必要的(除非你需要一个文字反斜杠),但在一个字符串中,\d只是成为d没有转义的字符.


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

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

/^(19|20)\d{2}$/.test(2013);
Run Code Online (Sandbox Code Playgroud)

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

new RegExp("^(19|20)\\d{2}$").test(2013);
Run Code Online (Sandbox Code Playgroud)