javascript eval 无法理解字符串中的某些 RegEx?

标签 javascript regex string eval

eval 似乎根本不理解 RegEx

我得到了这个 string 来检查 input 字段中输入的 YEAR

RegEx 应该匹配类似:201019801900< 之间的任何年份/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/

相关文章:

javascript - ReactJS 身份验证不起作用,重定向到登录页面失败

javascript - 使用 anchor 、类和 jQuery 滚动

javascript - 这个正则表达式可以简化吗?所需的模式是大写的单词

php - 在 RegEx 中使用单词边界 (\b) 我需要在单词之前和之后,还是之前?

python - 字符串到(可能的)整数。错误处理 : Filter with regex or try. ..catch?

java - 在没有 apache 库的情况下根据空格将行分割成字符串

string - 在 UNIX 文件的每一行中第 N 次出现后替换所有出现的字符

javascript - 跨 iframe 触发点击

javascript - Ember 测试助手产生错误的 JSHint 错误

c - Scanf 不接受第二个字符字符串