JavaScript: Rechenoperator in Variable abspeichern und wieder als Rechenzeichen in eine Rechnung übergeben?

2 Antworten

Danke. Habs jetzt mit einem Prof gelöst

Html: <div id="msg"></div>

    <input id="txt_input"

        type="input"

        required

        pattern="[0-9]+[\+\-\*\/]{1}[0-9]+"

        placeholder="1 + 3"

        title='Bitte im Format "Zahl Operant Zahl" eingeben :-)'></input>

    <button id="btn_calculate">berechne</button>

    <input id="txt_result" type="input" disabled></input>

JS:  $("#btn_calculate").click( function() {

    let string = $("#txt_input").val().trim();

    let add = new RegExp("^[0-9]+[\+]{1}[0-9]+$").test(string);

    let sub = new RegExp("^[0-9]+[\-]{1}[0-9]+$").test(string);

    let mul = new RegExp("^[0-9]+[\*]{1}[0-9]+$").test(string);

    let div = new RegExp("^[0-9]+[\/]{1}[0-9]+$").test(string);

    if (add || sub || mul || div) {

      let result = null;

      if(add) {

        let list_of_nums = string.split("+");

        let z1 = parseInt(list_of_nums[0].trim());

        let z2 = parseInt(list_of_nums[1].trim());

        result = z1 + z2;

      }

      if(sub) {

        let list_of_nums = string.split("-");

        let z1 = parseInt(list_of_nums[0].trim());

        let z2 = parseInt(list_of_nums[1].trim());

        result = z1 - z2;

      }

      if(mul) {

        let list_of_nums = string.split("*");

        let z1 = parseInt(list_of_nums[0].trim());

        let z2 = parseInt(list_of_nums[1].trim());

        result = z1 * z2;

      }

      if(div) {

        let list_of_nums = string.split("/");

        let z1 = parseInt(list_of_nums[0].trim());

        let z2 = parseInt(list_of_nums[1].trim());

        result = z1 / z2;

      }

      $("#txt_result").val(result);

    } else {

      $("#txt_result").val("fail");

Die schnellste Lösung erreichst du mit eval. Nur solltest du zumindest die Eingabe vorher validieren, sodass nur Rechenzeichen interpretiert werden.

Ich würde den Term in drei Felder aufteilen: Zwei Eingabefelder für Zahl 1 und Zahl 2 sowie eine Droplist (select) für die verfügbaren Rechenoperatoren.

PS.: So lange du kein HTML setzt, brauchst du innerHTML nicht. Das Property innerText ist passender.