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)