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"
},
当输入数据是值得的时,它会继续打印错误事件。
可能是什么问题?
任何建议都表示赞赏。
答案 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);