繁体   English   中英

计算javascript输入type = text

[英]Calculation on a javascript input type=text

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

输入字段很简单

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

将值作为浮点数获取的代码为:

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

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

谢谢

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

eval("2 + 5")

或例如:

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

忘却eval ,麻烦多于其价值。

您应该解析字符串并以正确的顺序执行数学表达式,根据您的需要,这可能是一个很大的算法。 我将把实现留给您,但总的来说,它将像这样:

  1. 清理输入:删除所有空格,将提高性能。
  2. 解析字符串:循环遍历字符并从运算符中分离数字。 例如,您可能最终得到一个维护所有顺序的数组。
  3. 将操作数以正确的顺序应用于从左到右的数字。 在上一步的数组中搜索*/ first等。如果需要对()支持,它将使事情变得更加复杂。

一个简单的例子: [10, *, 10, /, 10]是您的数组。 您搜索*/ ,并找到*的第一个索引1 您应用arr[1-1] * arr[1+1] ,新结果为[100, /, 10] 您继续,等等。

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

由于这个问题,您应该使用eval ,这不是安全的事情。 但是您可以在执行此操作之前清除输入字符串:

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

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

console.log(eval(saveExpression ));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM