2017-07-28 10 views
0

私は'5 + 10 * 4'のような文字列を受け取り、eval(string)と評価して結果を返す関数を持っています。コードは機能しますが、問題があります。文字列には'√'という値があることがあります。例:'4 * √64 + 10'。これにより、eval()関数がクラッシュします。 '4 * √64 + 10''4 * Math.sqrt(64) + 10'に変換するにはどうすればよいですか。'√'を持つ文字列をeval()に与えることができる文字列に変換します。

+0

正規表現を使用 – mehulmpt

答えて

1

最初にまずevalに任意の非スタンダードJavaScriptを実行できないように注意してください。 XSS攻撃は非常に厄介なことがあります。

次に、正規表現を使用します。

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

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

あなたはまた、任意にネストされた式の平方根を取ることができるようにする必要がある場合、あなたはおそらくに装備されたライブラリを使用する必要があり、その場合には実際のパーサを、必要になりますmath.jsのように、解析された数式も評価します。

関連する問題