计算单个文本元素的值

时间:2014-03-28 00:13:10

标签: javascript jquery eval

我写了这个。但它正在使用邪恶的评估。任何关于更清洁的方法的指导。我的消毒方法是否足够好?我搜索了堆栈并找到了其他答案,但没有任何东西像正确的方式一样跳出来。

<input class="simple-math" name="TheCalculation" value="">

最终用户将输入 5 + 3 或其他内容,该框会将值更新为8。

    $().ready(function () {
        $(".simple-math").change(function () {
            // get the current val
            var raw = $(this).val();
            // sanitize, so a smarty-pants can't do bad stuff
            var sanitize = raw.replace(/[^0-9\+\-\*\/\%\(\)]+/, "");
            // eval the input
            var calc = eval(sanitize);
            // set the value
            $(this).val(calc);
        })
    });

1 个答案:

答案 0 :(得分:0)

  

清洁

在什么意义上?有一些替代方案:

  1. 解析输入并进行自己的计算,但 eval 对你来说非常有用。

  2. 提供类似计算器的UI,以便用户只能访问您提供的令牌来构建表达式。验证表达式是否已构建,然后将结果传递给 eval (或自行解析)。

  3.   

    消毒方法足够好

    它会影响2.5 * 3这样的表达式的结果,因为它会删除句点,2.3e3 * 6会删除句点和e,所以可能不会。