我在正则表达式中真的需要一些帮助,我正在开发像
这样的函数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
请帮帮我
}
答案 0 :(得分:1)
如何对有效字符进行测试(以防止某些代码注入),然后尝试“eval”-ing it?
function doMath(myVar){
if (/^[0-9()%*\/+-]+$/.test(myVar)){
try{
return eval(myVar);
}catch(e){}
}
return false;
}
答案 1 :(得分:0)
如评论中所提到的,算术方程不常规,所以不要使用正则表达式处理它们。
为算术表达式编写Context-free grammar并使用像Jison这样的解析器生成器,它可以从您给定的语法生成javascript中的解析器。
用于数学表达式的示例CFG
在Jison页面上向下滚动到“指定语言”部分。该部分提供了一种语法语法来解析算术表达式。希望这会有所帮助。