转换包含'√'的字符串一个可以给予eval();

时间:2017-07-28 17:53:27

标签: javascript

我有一个接收类似'5 + 10 * 4'的字符串的函数,然后使用eval(string)对其进行评估,返回结果。代码有效,但我遇到了问题,有时字符串可能有'√'值;例如:'4 * √64 + 10'。这使eval()函数崩溃。如何将'4 * √64 + 10'转换为'4 * Math.sqrt(64) + 10'

1 个答案:

答案 0 :(得分:1)

首先,请注意不要让eval执行任意的,未经过优化的JavaScript。 XSS攻击可能非常讨厌。

其次,使用正则表达式。

function solve(math) {
  return Number(eval(math.replace(/√(\d+)/g, 'Math.sqrt($1)')));
}

console.log(solve('4 * √64 + 10'));

如果你还需要能够采用任意嵌套表达式的平方根,你需要一个实际的解析器,在这种情况下你应该使用一个能够评估解析过的数学表达式的库,比如{{ 3}}