使用Javascript从文本字段运行方程式

时间:2012-06-01 21:42:52

标签: javascript jquery

我正在尝试创建一个简单的在线计算器,可以在Javascript中运行基本计算。

我已设法创建接口,以便数字和运算符存储在表单字段中。

我希望能够将表单字段中的值传递给一个函数,该函数将计算表单字段的总和。

表单字段可以包含使用括号从简单的10 + 10到更复杂的等式的任何内容。使用的运算符是+ - * /

是否可以将表单字段传递给javascript函数,该函数可以识别运算符并对值执行操作功能。

文本字段中的可能值为:

四分之一百二十+五分之一百三十

然后该函数应返回56作为答案。当我知道这个小提琴http://jsfiddle.net/DhqGB/

中的值时,我已经在javascript中完成了这个

我希望能够将完整值“120/4 + 130/5”传递给函数,并且能够提取数字和运算符来创建总数。

有没有人对如何做到这一点或是否有可能有任何想法?这可能会变得更加复杂,我可能需要在括号中传递值“(120/4)+(130/5)”

5 个答案:

答案 0 :(得分:6)

我可能因此受到抨击。但是,无论如何它仍然存在。

我可以为此考虑三种解决方案:

  1. 实现自己的解析器,词法分析器并解析出代码。 这不是一件容易的事,但它可能是一次很棒的学习经历。
  2. 在仅适用于此目的的子域下运行eval,以便脚本无法恶意访问您的网站
  3. 清理输入以仅包含12345678790+-/*().

  4.  eval(input.replace(/[^0-9\(\)\+\-\*\/\.]/g, ""));
    

    请用一些技巧来解决这个问题

答案 1 :(得分:5)

您可以使用math.js库中包含的表达式解析器:

http://mathjs.org

使用示例:

math.eval('1.2 / (2.3 + 0.7)');   // 0.4
math.eval('5.08 cm in inch');     // 2 inch
math.eval('sin(45 deg) ^ 2');     // 0.5
math.eval('9 / 3 + 2i');          // 3 + 2i
math.eval('det([-1, 2; 3, 1])');  // -7

答案 2 :(得分:1)

如果您不允许使用标识符,则很难对eval造成太大损害。

function reval(string){
    var answer='';
    if(/^[\d()\/*.+-]+$/.test(str)){
        try{
            answer= eval(str);
        }
        catch(er){
            answer= er.name+', '+er.message;
        }

    }
    return answer;
}

答案 3 :(得分:0)

eval怎么办?

calc视为文本字段的ID。然后

$('#calc').change(function(e){                
    alert(eval($(this).val()));
})

但请记住在处理之前验证输入。

答案 4 :(得分:0)

这是一个非常古老的主题,但对于有类似问题的新访问者:string-math包计算[String]方程,如上面示例120/4+130/5中所示。它还识别括号。