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

jdu*_*blu 0 javascript jquery

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

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

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

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

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

文本字段中的可能值为:

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

然后该函数应返回56作为答案.当我知道这个小提琴中的值时,我已经在javascript中完成了这个.http://jsfiddle.net/DhqGB/

我想要做的是将完整的值"120/4 + 130/5"传递给函数,它能够提取数字和运算符来创建总数.

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

Jua*_*des 6

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

我能想到三种解决方案:

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

 eval(input.replace(/[^0-9\(\)\+\-\*\/\.]/g, ""));
Run Code Online (Sandbox Code Playgroud)

请用技巧来解决这个问题

  • @Ohgodwhy如果你给我一个失败的输入字符串,我很乐意接受downvote,你的评论看起来像一个巨魔. (4认同)
  • @Ohgodwhy在开始讨论废话之前尝试一下`eval("2-2".replace(/ [^ 0-9 \(\)\ +\ - \*\/ \.]/g,""))== = 0 // true`我不过滤掉它,我把它保存在白名单中,看看正则表达式; 接受数字,运算符和括号 (3认同)

Jos*_*ong 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
Run Code Online (Sandbox Code Playgroud)