JSLOVE
@JSLOVE (american tarou)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

文字として認識されている式を計算したい(JavaScript)

文字として認識されている式を計算したい。(javascript)

formに式を書いてもらって、それを計算するというプログラムを作りたいのですが、やり方がよくわからず、うまくいっていません。解決方法を教えてください。

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

HTML

 <form name="alert" id="alert_form">
        <input type="text" name="alert_form_input" id="alert_form_input">
        <input type="button" id="alert_form_button_1" value="送信" onclick="fulaka_b()">
    </form>

JavaScript

 var text_form=document.alert.alert_form_input.value;
 console.log(Number(text_form));

これを実行しフォームに1+2+3と入力したとすると

NaN

とコンソールに出力されます。6と出力されてほしいのですが。だれかわかる人がいたら教えてください。

0

2Answer

evalFunctionで書く方法はありますが、任意コード実行にあたるので、そのままでは悪意を持った第三者による攻撃が可能になります。
JavaScript Expression Evaluatormathjsといったライブラリを使用するのも一つです。
もし自分自身でコードを書きたい、という場合は数式を正規表現などでチェックする必要があります。

3Like

Comments

  1. @JSLOVE

    Questioner

    ライブラリを使う方法もありましたね!ありがとうございます。

以下のような形で、入力された式の計算ができると思います。

eval(text_form);

Function('return ('+text_form+');')();

ただ、このまま利用するとformにjsコードが記述されている場合、そのコードをそのまま実行されてしまうことになり脆弱性につながってしまいます。

事前に「数値」と「計算に用いる記号」のみで入力されているか、正規表現などでチェックをすれば安全性は高まると思います。

その方法については、こちらの記事が参考になると思います。

また数式かどうかチェックしつつ、数式であれば計算結果を返してくれるライブラリなどもあるようですので、そういったライブラリを使用するのもありだと思います。

1Like

Comments

  1. @JSLOVE

    Questioner

    わざわざありがとうございます。うまく実行することができました。

Your answer might help someone💌