【发布时间】:2014-08-21 15:52:25
【问题描述】:
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"
},
当 输入数据 值得时,它会继续打印 Error 事件。
可能是什么问题?
欢迎提出任何建议。
【问题讨论】:
-
顺便说一句:
eval是邪恶的。eval("/.../")在功能上等同于new Regexp("..."),但速度要慢得多且安全性较低。几乎 JavaScript 中的所有内容都可以在没有eval的情况下完成 - 并且应该是。 -
好建议:你能告诉我如何用
new RegExp做到这一点吗?我试过;var str=new RegExp("/^(19|20)\d{2}$/"); str.test(2013) //logs false.如何最好地使用new RegExp()?? -
与 Jake King 的答案相同:
new Regexp使用字符串文字作为参数,并且在字符串文字中反斜杠需要转义。
标签: javascript regex string eval