如何使用Javascript将字符串表达式转换为数值

如何使用Javascript将字符串表达式转换为数值,javascript,jquery,.net,client-side,Javascript,Jquery,.net,Client Side,基本上,我有一个用户输入字段,用户可以在其中输入一个数字。他们也希望能够在输入字段中输入方程式 类似于“874.45*0.825+4000”,并将其转换为实际数值 我找到的所有解决方案都指向可怕的eval()方法。特别是作为一个用户输入的字段,我只关心运行eval(“874.45*0.825+4000”)并希望从后端获得一个数字 我想我可以对服务器(ASP.NET)进行web服务调用,但我担心稍有延迟会让用户感到沮丧 有人知道一种好的技术或现有的库吗?只需将其乘以1,它就会迫使javascrip

基本上,我有一个用户输入字段,用户可以在其中输入一个数字。他们也希望能够在输入字段中输入方程式

类似于“874.45*0.825+4000”,并将其转换为实际数值

我找到的所有解决方案都指向可怕的eval()方法。特别是作为一个用户输入的字段,我只关心运行eval(“874.45*0.825+4000”)并希望从后端获得一个数字

我想我可以对服务器(ASP.NET)进行web服务调用,但我担心稍有延迟会让用户感到沮丧


有人知道一种好的技术或现有的库吗?

只需将其乘以1,它就会迫使javascript从那时起将其视为整数

乙二醇


这里真正需要的是一个“表达式解析器”,因为您正试图允许用户使用一种小型的领域特定语言来表达他们的值

基本力学原理如下:

  • 将其表达式标记为运算符和操作数

  • 根据运算顺序(例如,乘法的计算优先级高于加法),将运算符和操作数推到堆栈上

  • 从堆栈中弹出操作数,并将中间结果推回堆栈。重复此操作,直到堆栈为空

  • 在我的整个项目中,我已经为不同的“小语言”做了无数次了。但绝不是用javascript。所以我不能直接推荐一个合适的解析库

    但谷歌搜索一下就会发现“PEG.js”。在这里查看:


    他们文档中的所有示例都是针对您试图构建的那种“表达式解析器”的。

    在这种情况下,
    eval
    有什么错

    对我来说,这完全符合你的任务。如果要屏蔽其执行上下文,则可以定义如下函数:

    function calc(str) {
      var window = null, self = null, document = null;
      // other globals like: $ = null, jQuery = null, etc. 
      try { return eval(str); } catch(e) {...}
    }
    

    并在需要解释字符串的地方使用它。简单有效。

    我认为,如果您解析结果字符串并验证其内容仅为数字和运算符,并通过将外部范围变量(如document等)冒充为“var document=null”来执行评估,eval可能会带来较小的安全风险。

    错误。如果用户输入字符串“1+1”,则您的方法失败。我认为您没有完全理解我的问题。如果用户输入'874.45*0.825+4000'*1,我将得到结果。抱歉,现在请通读一遍。在我看来,您必须对()进行评估。请看这里:
    function calc(str) {
      var window = null, self = null, document = null;
      // other globals like: $ = null, jQuery = null, etc. 
      try { return eval(str); } catch(e) {...}
    }