javascript正则表达式问题
我真的需要正则表达式方面的帮助,我正在处理一个函数,比如javascript正则表达式问题,javascript,regex,Javascript,Regex,我真的需要正则表达式方面的帮助,我正在处理一个函数,比如 var x = 0; function doMath(myVar){ RE = //; // here is the problem if(RE.test(myVar)) eval(x+myVar) else return false; } 我想让RE匹配任何可以加到这个数字上的数学方程,比如 EXAMPLE +10+20+30 //accepted **10 //rejected -10- // rejected 10
var x = 0;
function doMath(myVar){
RE = //; // here is the problem
if(RE.test(myVar))
eval(x+myVar)
else
return false;
}
我想让RE匹配任何可以加到这个数字上的数学方程,比如
EXAMPLE
+10+20+30 //accepted
**10 //rejected
-10- // rejected
10 // rejected
%10 //accepted
*(10+10)-10 //accepted
请帮帮我
}只测试有效字符(以防止某些代码注入),然后尝试“评估”如何
如注释中所述,算术公式不是正则表达式,因此不要使用正则表达式处理它们 为算术表达式编写一个语法分析器,并使用类似的解析器生成器从给定语法生成javascript解析器 数学表达式的示例CFG
在页面上向下滚动至“指定语言”部分。该部分给出了解析算术表达式的语言语法。希望这能有所帮助。数学公式不是一种常规语言(由于平衡括号问题),因此您真的不应该尝试使用单个正则表达式来解析它。我该怎么办?有什么建议吗?我同意戴维的看法。如果最终目标是对表达式求值,那么应该尝试使用后缀方法和堆栈对其求值@法拉利车迷。。这应该作为一个answer@ferrari-但如何将表达式转换为后缀符号?这和首先计算表达式一样困难,你仍然需要正确地解析和理解它…我在4小时前刚刚写了同样的内容,这时by boss进来了:P。你应该注意,验证也阻止了代码注入(例如,如果文本来自查询字符串)。谢谢@Kobi,添加了一些单词,但我不是100%确定,它完全阻止了代码注入。:-)不过,我没有看到任何只使用0-9和数学运算符的注入。
function doMath(myVar){
if (/^[0-9()%*\/+-]+$/.test(myVar)){
try{
return eval(myVar);
}catch(e){}
}
return false;
}