计算javascript输入类型=文本

时间:2014-05-25 10:32:38

标签: javascript

我有一个输入类型=文本,我将其值与另一个已知值进行比较。当用户输入整数或浮点数时,它的效果很好。但是,如果用户输入12/297或12 + 9的计算,我想执行计算,然后将结果与已知值进行比较。有关如何做到这一点的任何建议。

输入字段只是

<input type="text" id="A1">

将值作为float获取的代码是:

parseFloat(document.getElementById("A1").value

我试过将值作为字符串并试图操纵但没有运气。此外,我尝试在操作符号上尝试解析为字符串,然后将操作应用于字符串的每个部分,但这对于一个小问题来说是一项巨大的工作,因此必须有一个更好的解决方案。

由于

3 个答案:

答案 0 :(得分:1)

您可以对输入值使用javascript eval函数。这会将文本评估为javascript代码。 例如,下一个语句产生值7:

eval("2 + 5")

或您的例子:

eval(document.getElementById("A1").value)

答案 1 :(得分:1)

忘记eval,这比它的价值更麻烦。

您应该解析字符串并以正确的顺序执行数学表达式,这可能是一个非常大的算法,具体取决于您的需要。我会把实现留给你,但在很高的层次上它会像这样:

  1. 清理输入:删除所有空格,这样可以提高性能。
  2. 解析字符串:循环遍历字符并从运算符中分隔数字。你最终可能会得到一个维护所有东西顺序的数组。
  3. 以正确的顺序将操作数应用于左侧和右侧的数字。首先搜索上一步的数组*/等。如果您需要()的支持,则会使事情变得更复杂。
  4. 简单示例:[10, *, 10, /, 10]是您的数组。您搜索*/,然后找到1的第一个索引*。您申请arr[1-1] * arr[1+1],新结果为[100, /, 10]。你继续等等。

    当然有很多可能的方法,但最重要的是:它不是一个“小问题”,“很多工作”是非常相对的。

答案 2 :(得分:0)

因为这个问题你应该使用eval,这不是安全的事情。但是您可以在此操作之前清理输入字符串:

var expression = document.getElementById("A1").value;

var saveExpression = expression.replace(/[^-()\d/*+.]/g, '');

console.log(eval(saveExpression ));