【问题标题】:jquery calculate dynamic equationjquery计算动态方程
【发布时间】:2015-12-02 15:49:06
【问题描述】:

我需要对动态字符串进行计算。

我将通过 ajax 从名为 rule 的 db 中得到一个方程。 该规则可能包含带有 +、-、*、/、% 等运算符的方程。

如何进行这个计算?

  for (var i = 0; i < rules.length; i++) {
          var rule = rules[i].rule; // may contain $structurename1$*$structurename2$/$structurename3$ like this
          $('form :input[type="text"]').each(function(index,value){
              rule = rule.replace('$'+$(this).attr('structurename')+'$',$(this).val());
          });
  }

$('#result').val(rule);

【问题讨论】:

  • 请提供您已经完成的代码,以便我们一起改进。
  • 不安全但eval("(10+5)*2");这本身是安全的,但是当您将其替换为用户输入的变量值时,您就可以让他们通过该 eval 访问运行代码。
  • 我有这样的输入字符串 ** "70+30" ** 我只需要结果应该是 "100"
  • 我们没有要求您描述您的代码,我们要求您直接发布。
  • stackoverflow.com/questions/6479236/… 这篇文章介绍了几个选项。

标签: javascript jquery


【解决方案1】:

Calculate string value in javascript, not using eval

使用上述链接中的代码组合:

1.去除公式中除数字、括号或 OR 运算符之外的所有内容。

2.将公式评估为函数

修改为在函数因输入无效而出错时返回NaN。由于步骤 1 中的 RegExp 替换,这不应该发生。

function calc(fn) {
  var formula = fn.replace(/[^-()\d/*+.]/g, '');
  try {
    return new Function('return ' + formula)();
  } catch (err) {
    return NaN;
  }
}

演示: https://jsfiddle.net/tjywg716/

【讨论】:

    【解决方案2】:
    var str_expression=textbox1.text();
    var result=eval(str_expression);
    textbox2.text(result);
    

    【讨论】:

      猜你喜欢
      • 2011-01-08
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多