私は eval について非常に多くの悪いことを聞いたので、一度も使用しようとさえしませんでした。しかし、今日、それが正しいと思われる状況があります。
変数を組み合わせて簡単な計算を実行できるスクリプトが必要です。たとえば、value=5 で max=8 の場合、value*100/max を評価したいとします。値と式の両方が外部ソースから取得されるため、eval に関心があります。
サンプルコードを使用して jsfiddle デモをセットアップしました。
値は parseFloat を使用して数値に変換されるため、ここではかなり安全だと思います。数式内の文字は、次の正規表現と再び一致します。
regex=/[^0-9\.+-\/*<>!=&()]/, // allows numbers (including decimal), operations, comparison
私の質問:
- 正規表現フィルターはあらゆる攻撃から私を守ってくれますか?
- この場合、eval と new Function を使用する理由はありますか?
- 数式を評価する別のより安全な方法はありますか?