Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Hilfe bei der Scripterstellung Eingabeüberprüfung

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Hilfe bei der Scripterstellung Eingabeüberprüfung

    This topic has been deleted. Only users with topic management privileges can see it.
    • Stabilostick
      Stabilostick last edited by

      Hi, ich bräuchte mal Hilfe mit Javascript. Bin da ein DAU. 😞

      Folgender Aufbau: Zwei Felder zur Ausgabe, davon ein Zahlen- und ein Textfeld.

      Zwei Variablen zur Eingabe:

      let eins = '<testzeichenfolge>';

      let zwei = '<testzeichenfolge>';

      Bedingungen:

      0a. Zahl ist dann Zahl, wenn <testzeichenfolge>ganzzahlig und >= 0

      0b. Text ist dann Text, wenn <testzeichenfolge>ASCII-Zeichen oder einfache Steuerzeichen wie :/. mit dabei sind. Leerzeichen ist nicht dabei.

      Logik:

      1. Anwender gibt nichts ein ('')-> Text und Zahlenfeld sollen jeweils undefined sein

      2. Anwender gib nur eine Zahl ein -> Zahl ins Zahlenfeld, Text ist undefined

      3. Anwender gibt nur Text ein -> Zahl undefiniert, Text ins Textfeld

      4. Anwender gibt Zahl und Text ein -> Text ins Textfeld und Zahl ins Zahlenfeld

      5. Anwender gibt Text und Zahl ein -> Text ins Textfeld und Zahl ins Zahlenfeld

      6. Anwender gib zwei mal Zahl ein -> Fehler und Text- und Zahlenfeld undefined

      7. Anwender gibt zweimal Text ein -> Fehler und Text- und Zahlenfeld undefined

      Ausgabe:

      zahlenfeld = …

      textfeld = "..."

      Komme mit den ganzen if / parseInt(..., 10) / !== / NaN() einfach nicht klar.</testzeichenfolge></testzeichenfolge></testzeichenfolge></testzeichenfolge>

      1 Reply Last reply Reply Quote 0
      • Stabilostick
        Stabilostick last edited by

        Wo etwas wie

        eins='hallo';

        zwei=0;

        // Ist eins ein Text oder leer -> Fülle zwei mit eins und setze eins NULL

        // Ist zwei eine Zahl -> Fülle speicher mit eins, eins mit zwei, zwei mit speicher

        // ist eins eine Zahl -> konvertiere eins in Zahl

        text=zwei;

        zahl=eins;

        Vergesse ich das was? Ist meine Logik richtig?

        1 Reply Last reply Reply Quote 0
        • Stabilostick
          Stabilostick last edited by

          Was macht diese Zeile? Ich bitte um Hilfe.

          if (parseInt(eingabe, 10).toString() !== (eingabe || '').toString()) {
          

          Meine Vermutung:

          • parseInt(eingabe, 10).toString() versucht, aus eingabe eine Zahl zu machen und daraus einen String

          • (eingabe || '').toString() macht aus eingabe einen String

          • !== ist ein vollständiger Vergleich ohne Konvertierung der beiden Seiten auf Ungleichheit

          Also wird geprüft, ob eingabe eine Zahl ist. Wenn nein, wird der if-Block ausgeführt.

          Doch was ist, wenn eingabe die Zahl 0 ist? (eingabe || '').toString() ist da leer, oder?

          Wie funktioniert das mit der 0 in diesem Fall, damit das funktioniert? Wie muss das Statement umgeschrieben werden, damit 0 auch als gültige Zahl erkannt wird und sich sonst nichts an der Funktionalität ändert?

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @Stabilostick:

            Wie funktioniert das mit der 0 in diesem Fall, damit das funktioniert? `
            Es wird vorausgesetzt, dass eingabe ein String ist. Mit '0' als Eingabewert funktioniert die Prüfung.

            1 Reply Last reply Reply Quote 0
            • Stabilostick
              Stabilostick last edited by

              eingabe wird mit einem Wert von argv[] (kommt von 'yargs') mit z.B. ~~[i]~~let eingabe = argv[2] initialisiert. Ich mag den Datentyp von eingabe nicht einfach ändern, da ich nicht weiß, was mit eingabe im weiteren Verlauf im Programm (nicht von mir) passiert.

              oder meinst du sowas wie

              if (parseInt(eingabe, 10).toString() !== (eingabe.toString() || '').toString()) {
              

              Kann das bei NULL oder anderen Zuständen für eingabe irgendwelche Probleme machen?

              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 last edited by

                @Stabilostick:

                Kann das bei NULL oder anderen Zuständen für eingabe irgendwelche Probleme machen? `
                Ja, kann es. Versuche es so:

                if(eingabe === 0) eingabe = '0';
                if(parseInt(eingabe, 10).toString() !== (eingabe || '').toString()) {
                
                1 Reply Last reply Reply Quote 0
                • Stabilostick
                  Stabilostick last edited by

                  Danke. Gelöst.

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  646
                  Online

                  31.7k
                  Users

                  79.9k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  476
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo