# Javascript: mehrere Textfelder prüfen ob es sich um eine Zahl handelt und diese zwischen 1 und 49 liegt



## Nils... (27. Nov 2020)

Hallo Community,

für ein eine onlie Lotterie Website (Uni-Projekt) muss der Kunde seine Lottozahlen selbst eingeben (in ein Textfeld!! Das soll NICHT geändert werden! Kein Feld vom typ number oder ähnliches gewollt!!!) und ich will mittels javascript prüfen, ob in diesem Feld wirklich eine Zahl eingetragen wurde und ob diese wirklich zwischen 1 und 49 liegt.

Hier mein Code:


Das Script wollte ich um weitere else if Zweige mit den jeweiligen boxen erweitern, aber leider klappt es schon bei box1 nicht...


Wer kann helfen?

Grüße
Nils


----------



## mihe7 (27. Nov 2020)

Verwende bitte Code-Tags (in der Toolbar des Editors die erste Schaltfläche) und keine Screenshots.

Du könntest z. B. `input type="number"` verwenden, um schon einmal nur Zahlen zuzulassen.


----------



## kneitzel (27. Nov 2020)

Also generell: JavaScript ist nicht Java. Das sollte man als erstes lernen / wissen.

Dann sollte man sich etwas mit Datentypen beschäftigen. Text sind Strings ... und die kann man nicht so einfach mit Zahlen vergleichen. Wenn ein String eine Zahl beinhaltet, dann kann man den String parsen. Dann müsste man noch wissen, in was für einen Datentyp man den haben will und schon kann man da mit google suchen ...

JavaScript String parse int würde ich dann als Suchbegriffe vorschlagen - dann solltest Du finden, was du suchst.



mihe7 hat gesagt.:


> Verwende bitte Code-Tags (in der Toolbar des Editors die erste Schaltfläche) und keine Screenshots.
> 
> Du könntest z. B. `input type="number"` verwenden, um schon einmal nur Zahlen zuzulassen.


Das hat er ja explizit ausgeschlossen. Aber parseint kann ja einen String parsen, so isnan false lieferte ....


----------



## mihe7 (27. Nov 2020)

kneitzel hat gesagt.:


> Das hat er ja explizit ausgeschlossen


Sorry, übersehen.


----------



## MoxxiManagarm (28. Nov 2020)

mihe7 hat gesagt.:


> Du könntest z. B. `input type="number"` verwenden, um schon einmal nur Zahlen zuzulassen.


Da wäre ich vorsichtig. Zeichen wie e , . sind auch erlaubt


----------



## mihe7 (28. Nov 2020)

MoxxiManagarm hat gesagt.:


> Da wäre ich vorsichtig. Zeichen wie e , . sind auch erlaubt


Das wäre auch nur der erste Schritt gewesen


----------



## MoxxiManagarm (28. Nov 2020)

mihe7 hat gesagt.:


> Das wäre auch nur der erste Schritt gewesen


Na. Anstatt einen Validator in irgendeiner Weise hinzuschustern, kann man auch einfach alle Zeichen wieder entfernen, die keine Zahlen sind. Sinngemäß


```
<input oninput="event.target.value = event.target.value.replace(/\D/g, '')"/>
```

Halte ich für die bessere Variante


----------



## Nils... (28. Nov 2020)

Ich bin jetzt doch auf type number umgestiegen und habe jetzt das Problem, dass ich prüfen möchte, dass es acuh wirklich 6 UNTERSCHIEDLICH zahlen sind:

```
<script>
        function check() {
            var a = document.getElementById("box1");
            var b = document.getElementById("box2");
            var c = document.getElementById("box3");
            var d = document.getElementById("box4");
            var e = document.getElementById("box5");
            var f = document.getElementById("box6");

             if(a != b != c != d != e != f){return true; alert("Ihr Tippschein wurde gespeichert!");}
             else if {return false; alert("Sie müssen 6 unterschiedliche Zahlen wählen");}

    </script>

</head>
    <body>
    <h1>6 aus 49</h1>
    <br>
    <form name="lottozahlen" th:action="@{/tippscheinspeichern}" th:object="${tippscheinform}" method="POST">
        <table id="sechsaus49">
            <caption>6 aus 49</caption>
            <tbody>
            <tr>
                <td><input type="number" id="box1" th:field="*{firstNumber}" name="box1" min="1" max="49" required></td>
                <td><input type="number" id="box2" th:field="*{secondNumber}" name="box2" min="1" max="49" required></td>
                <td><input type="number" id="box3" th:field="*{thirdNumber}" name="box3" min="1" max="49" required></td>
                <td><input type="number" id="box4" th:field="*{fourthNumber}" name="box4" min="1" max="49" required></td>
                <td><input type="number" id="box5" th:field="*{fifthNumber}" name="box5" min="1" max="49" required></td>
                <td><input type="number" id="box6" th:field="*{sixthNumber}" name="box6" min="1" max="49" required></td>

            </tr>
            </tbody>
        </table>
        <button type="submit" value="Tippschein speichern" onclick="check()">Tippschein speichern</button>
    </form>
```

Leider greift die Funktion nicht......
Dass mit dem replacen werde ich noch einbauen 

Kann mir wer sagen was falsch ist?


----------



## mrBrown (28. Nov 2020)

Deine Bedingung ist falsch: `a != b != c != d != e != f`

Einfach mal bis auf eine nur gleiche Zahlen eingesetzt und schrittweise ausgewertet:


```
2 != 1 != 1 != 1 != 1 != 1
  true != 1 != 1 != 1 != 1
      false != 1 != 1 != 1
            true != 1 != 1
                false != 1
                      true
```


----------



## mihe7 (28. Nov 2020)

Nils... hat gesagt.:


> Kann mir wer sagen was falsch ist?


Du willst auch nicht die Elemente, sondern deren Werte. Außerdem bietet es sich bei 49 6 Eingaben an, nicht jedes input-Element einzeln zu behandeln...


----------



## mrBrown (28. Nov 2020)

mihe7 hat gesagt.:


> Du willst auch nicht die Elemente, sondern deren Werte.


oh, den Teil hab ich ganz übersehen


----------

