我写了这个。但它正在使用邪恶的评估。任何关于更清洁的方法的指导。我的消毒方法是否足够好?我搜索了堆栈并找到了其他答案,但没有任何东西像正确的方式一样跳出来。
<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);
})
});
答案 0 :(得分:0)
清洁
在什么意义上?有一些替代方案:
解析输入并进行自己的计算,但 eval 对你来说非常有用。
提供类似计算器的UI,以便用户只能访问您提供的令牌来构建表达式。验证表达式是否已构建,然后将结果传递给 eval (或自行解析)。
消毒方法足够好
它会影响2.5 * 3
这样的表达式的结果,因为它会删除句点,2.3e3 * 6
会删除句点和e
,所以可能不会。