eval
似乎根本不理解 RegEx
。
我得到了这个 string
来检查 input 字段中输入的 YEAR
。
RegEx 应该匹配
类似:2010、1980 或 1900< 之间的任何年份/strong> 到 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
请参阅 fiddle : http://jsfiddle.net/zq30puzm/
这用于:
"getYear":{
"regex":"/^(19|20)\d{2}$/",
"alertText":"* Invalid Year"
},
当输入数据值得输入时,它会继续打印错误事件。
可能是什么问题?
如有任何建议,我们将不胜感激。
fiddle : http://jsfiddle.net/zq30puzm/
最佳答案
在字符串版本中,需要对反斜杠进行转义。
var testStr2 = eval("/^(19|20)\\d{2}$/").test(2013);
在正则表达式文字中,转义反斜杠是不必要的(除非您需要文字反斜杠),但在字符串中,\d
只是变成字符 d
而无需转义。
请注意,确实应该不惜一切代价避免使用 eval
。您不太可能需要它,并且如果不充分注意确保它不会被用于恶意目的,使用它总是很危险的。此外,如果您的正则表达式格式不正确或出现其他错误,您将不会收到有用的错误消息,它可能会以奇怪的方式中断。
如果可以,请使用 RegExp 文字!它们方便可靠,您不必进行任何不必要的转义:
/^(19|20)\d{2}$/.test(2013);
如果您需要来自字符串的正则表达式,请使用构造函数而不是 eval
。它会做同样的事情,但更安全。
new RegExp("^(19|20)\\d{2}$").test(2013);
关于javascript eval 无法理解字符串中的某些 RegEx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25430701/