jk296: Prüfung PLZ (1. Problem)

Hallo,

hier Quellcode:

var chkZ = 1;
  for (i = 0; i < document.Formular.PLZ.value.length; ++i)
    if (document.Formular.PLZ.value.charAt(i) < "0" ||
        document.Formular.PLZ.value.charAt(i) > "9")
      chkZ = -1;
  if (chkZ == -1) {
    alert("Bitte die PLZ korrekt eingeben!");
    document.Formular.PLZ.focus();
    return false;
  }

Es soll zusätzlich geprüft werden, ob die PLZ aus genau fünf Zahlen besteht. Wenn nicht, dann diesbezüglich Fehlermeldung und zurück ins Eingabefeld!

(Wie wird die Prüfung in den Code integriert? BITTE nicht einfach nur Links oder JS-Objekte nennen!)

Danke.

  1. for (i = 0; i < document.Formular.PLZ.value.length; ++i)

    Rate, welche Information sich hinter document.Formular.PLZ.value.length verbirgt. Tipp: length ist das englische Wort für Länge

    1. Ehm ... ja ... nur wo steht, dass es genau fünf Zeichen sein müssen???

      1. Ehm ... ja ... nur wo steht, dass es genau fünf Zeichen sein müssen???

        Das musst du dazuschreiben, Javascript kann das nicht wissen.

  2. Hi!

    Mich interessiert grad, wofuer das eigentlich sein soll.

    Dass es um fuenfstellige Zahlen geht sehe ich auch. Du erwaehnst auch noch Postleitzahlen. Also schreibst Du ein System das fuenfstellige PLZ, die nur aus Zahlen bestehen, erkennen soll? Willst Du das fuer jede art PLZ machen? Finde ich etwas umstaendlich. Oder sollen nur deutsche, amerikanische, australische,... PLZ verarbeitet werden koennen? (Warum?)

    1. Also schreibst Du ein System das fuenfstellige PLZ, die nur aus Zahlen bestehen, erkennen soll?

      sollen nur deutsche, amerikanische, australische,... PLZ verarbeitet werden koennen? (Warum?)

      Weil er nur Kunden aus Deutschland ansprechen will, denn Ausländer bezahlen vielleicht die immensen Portokosten nicht oder dürfen aus rechtlichen Gründen nicht bedient werden? Die Beschränkung des Absatzmarktes muss nicht automatisch ihre Ursache in der Beschränkung des Formularautors haben, dementsprechend ist das in anderen Ländern verwendete Postleitformat erstmal weitestgehend irrelevant.

      PS: US-Postleitzahlen haben bis zu neun Ziffern.

      1. Hi!

        Dann will ich mal aus dem beruflichen Naehkaestchen plaudern.

        Natuerlich kann man sich entscheiden nur deutsche Postleitzahlen zu aktzeptieren. Das ist sinnig um nicht totalen Muell zu speichern. Aber es ist noch lange kein Garant fuer korrekte Werte. Als Zahlen sollte man sie sowieso nicht verwenden, sondern stets als String behandeln.

        PS: US-Postleitzahlen haben bis zu neun Ziffern.

        Aehm. Das ist ein Irrtum. Wie in Brasilien werden in den USA gern Postfaecher an die Postal Codes gepappt. Generell sind US Postleitzahlen fuenfstellig. Alles andere ist ein lustiger Gimmick, nichts was man verwenden sollte, wenn man einer anderen Firma im gleichen Ort etwas schicken will... Dazu kommen die in den US noch gaengigen Kuerzel fuer den State. Sowas verursacht dann schonmal lustige Vorkomnisse.

        Postleitzahlen sind allgemein ein verzwicktes Thema. Und jede Loesung zur Kontrolle von Postleitzahlen, die nicht an eine
        Datenbank gekoppelt ist, in der JEDE Postleitzahl vorhanden ist, wird Fehler produzieren. Der Witz ist: Man glaubt nicht wieviele Leute ihre eigene Postleitzahl nicht korrekt kennen und man glaubt noch viel weniger wieviele korrekte Postleitzahlen es gibt, die aber eben doch falsch sind. Z.B. die PLZ eines Postfaches. Die kennt nur die Post und die gibt sie gewoehnlich nicht einfach so raus. Da ist fleissiges Sammeln angesagt.

        Wenn ich allein dran denke wieviele Leute davon ueberzeugt sind DE10177
         oder D-10177 seien z.B. eine gueltige Berliner Postleitzahl... (wahlweise jede andere Postleitzahl mit entspr. Laendercode davor) Davor schuetzt natuerlich das Script. Das ist auch gut so. (Wenn die PLZ auf Deutschland  beschraenkt sind)

        Allgemein empfehle ich fuer eine Postleitzahl 10 Zeichen zu reservieren, und zwar als String (immer, schliesslich kann man mit den Dingern auch nicht rechnen). Damit sollte man theoretisch auskommen, gaebs da nicht die Leute die ihre Daten irgendwo eintragen muessen... Und glaubt mir, ich hab schon alles moegliche im PLZ Feld gesehen.

  3. @@jk296:

    Es soll zusätzlich geprüft werden, ob die PLZ aus genau fünf Zahlen besteht.

    Eine deutsche(!) PLZ ist _eine_ Zahl. Und zwar eine mit fünf _Ziffern_.

    Und schon dieser Ansatz ist recht unsinnig. [https://forum.selfhtml.org/?t=167490&m=1092447]

    (Wie wird die Prüfung in den Code integriert? BITTE nicht einfach nur Links oder JS-Objekte nennen!)

    Weder noch. Ich gebe dir den Hinweis, dass eine clientseitige Lösung allein sowieso unsinnig ist und lediglich eine sinnvolle Ergänzung zu einer erforderlichen serverseitigen Prüfung ist. Ich nenne dir noch den Suchbegriff „Affenformular“; die Links suchst du dir SELF.

    Danke.

    Gerngeschehen.

    Live long and prosper,
    Gunnar

    --
    „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
  4. Hallo,

    Es soll zusätzlich geprüft werden, ob die PLZ aus genau fünf Zahlen besteht. Wenn nicht, dann diesbezüglich Fehlermeldung und zurück ins Eingabefeld!

    Wir wärs denn mit

      
    element = document.Formular.PLZ.value;  
    if(element.length == 5 && !isNaN(element)) erfolg();  
    else { whatever() };  
    
    

    ?

    — lg, gabriel

    1. Hallo,

      Es soll zusätzlich geprüft werden, ob die PLZ aus genau fünf Zahlen besteht. Wenn nicht, dann diesbezüglich Fehlermeldung und zurück ins Eingabefeld!

      Du stellst bereits umständlich fest, ob die PLZ aus nur Ziffern besteht oder nicht (in chkZ), und fragst das dann ab.

      Nun, statt einfach zu sagen "Wenn nicht, dann diesbezüglich Fehlermeldung und zurück ins Eingabefeld!" (genau das geschieht ja in den Zeilen: if(chkZ = -1)...), musst du also sagen "Wenn nicht oder wenn es nicht fünf Zeichen sind...". Das kannst du also in derselben Zeile schreiben. Die Information, wieviele Zeichen es genau sind, steht in deiner Zählvariablen i, die du vorher hochgezählt hast beim Abchecken auf Ziffern. Wenn es 5 Ziffern sind, hat i den Wert 6, sonst einen anderen.

      Wir wärs denn mit

      element = document.Formular.PLZ.value;
      if(element.length == 5 && !isNaN(element)) erfolg();
      else { whatever() };

        
      Ich nehme an, dass hier der Ausdruck !isNaN(element) den Wert true liefern soll, wenn element nur aus Ziffern besteht, sonst false. Das funktioniert aber nicht zuverlässig, denn z.B. !isNaN('\n\r\t  ') liefert ebenfalls true und hat sogar die Länge 5, ist aber keine Zahl.  
        
      Gruß, Don P