javascript输入类型=文本的计算

javascript输入类型=文本的计算,javascript,Javascript,我有一个输入类型=文本,我将其值与另一个已知值进行比较。当用户输入整数或浮点数时,效果非常好。但是,如果用户输入计算,比如12/297或12+9,我希望执行计算,然后将结果与已知值进行比较。关于我将如何做的任何建议 输入字段是简单的 <input type="text" id="A1"> 我尝试过将值作为字符串并尝试对其进行操作,但没有成功。此外,我还尝试将其解析为操作符号上的字符串,然后将该操作应用于字符串的每个部分,但这对于一个小问题来说是一项巨大的工作,因此必须有一个更好的解

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

输入字段是简单的

<input type="text" id="A1">
我尝试过将值作为字符串并尝试对其进行操作,但没有成功。此外,我还尝试将其解析为操作符号上的字符串,然后将该操作应用于字符串的每个部分,但这对于一个小问题来说是一项巨大的工作,因此必须有一个更好的解决方案


谢谢

您可以对输入值使用javascript eval函数。这将把文本作为javascript代码进行计算。 例如,下一条语句生成值7:

eval("2 + 5")
或者举个例子:

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

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

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

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

console.log(eval(saveExpression ));

忘了
eval
,它的麻烦比它的价值还多

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

  • 清理输入:删除所有空白,这将提高性能
  • 解析字符串:在字符上循环并将数字与运算符分开。例如,您可以使用一个数组来维护所有事物的顺序
  • 将操作数按正确的顺序应用于其中的左右数字。首先在上一步的数组中搜索
    *
    /
    等。如果您需要
    的支持,这将使问题更加复杂
  • 简单示例:
    [10,*,10,/,10]
    是您的数组。搜索
    *
    /
    ,找到
    *
    的第一个索引
    1
    。应用
    arr[1-1]*arr[1+1]
    ,新结果是
    [100,/,10]
    。你继续等等


    当然有很多可能的方法,但底线是:这不是一个“微小”的问题,“大量工作”是非常相关的。

    你能展示“大量工作”的工作代码吗?问题并不像你想象的那么微小。实际上,您必须在那里解析表达式,这意味着读取字符串并确定操作数和运算符。您可以尝试使用
    eval
    ,但是为了保证一切安全,您还需要进行更多的编程……使用
    eval
    将假定用户输入的不是真正的“计算”,而是JavaScript“计算”。对于大多数用户来说,这是一个很大的假设。你能教你的用户如何使用Math对象吗?大量的工作是指这样一个事实,从逻辑上讲,在数学运算中解析输入对我来说没有意义,然后根据解析运算是什么来重构运算+,-,*,/。。很适合使用外部库为您解析表达式!如果您要使用
    eval
    方法,请至少发出安全警告。谢谢,我将尝试此方法,安全性并不重要,因为在封闭系统中使用受到限制。我不会使用eval,以防它在某个时候需要公开。你不能用一个正则表达式来保证eval的安全。我同意你的答案是正确的,但是出于我的需要,eval将用于我现在需要的个人应用程序,因此更好的方法将不得不等待。坦斯克
    var expression = document.getElementById("A1").value;
    
    var saveExpression = expression.replace(/[^-()\d/*+.]/g, '');
    
    console.log(eval(saveExpression ));