eval
似乎根本不理解regex
。
我得到了这个string
来检查输入字段中输入的year
。
正则表达式应该匹配
类似于:2010年,1980年或1900到2099年之间的任何年份。
regex:^(1920)\d{2}$
在原始JavaScript
中运行良好,例如:
var testStr = /^(19|20)\d{2}$/.test(2013) //logs true
但是teststr2=eval(“/^(1920)\d{2}$/”)。test(2013)//logs false
请参阅Fiddle:http://jsfiddle.net/zq30puzm/
目前正在以下方面使用:
"getYear":{
"regex":"/^(19|20)\d{2}$/",
"alertText":"* Invalid Year"
},
当输入的数据是值得输入的数据时,它继续打印错误事件。
问题可能是什么?
欢迎提出任何建议。
小提琴:http://jsfiddle.net/zq30puzm/
在字符串版本中,需要转义反斜杠。
var testStr2 = eval("/^(19|20)\\d{2}$/").test(2013);
在正则表达式文本中,转义反斜杠是不必要的(除非您需要文本反斜杠),但是在字符串中,\d
只会变成字符d
而不转义。
值得注意的是,确实应该不惜一切代价避免eval
。 您不太可能需要它,如果不小心确保它不会被滥用到恶意的目的,使用它总是很危险的。 此外,如果您的正则表达式格式错误或发生其他错误,您将不会得到有用的错误消息,它很可能只是以奇怪的方式中断。
如果可以,请使用正则表达式文字! 它们方便可靠,你不必做任何不必要的逃生:
/^(19|20)\d{2}$/.test(2013);
如果需要字符串中的正则表达式,请使用构造函数而不是eval
。 它会做同样的事情,但更安全。
new RegExp("^(19|20)\\d{2}$").test(2013);