tropenberta: zahl oder buchstabe

hi leuts

hab mir zum ueben ein kleines formular erstellt und würde dieses gerne aktiver gestalten.

mein erstes problem ist ich würde gerne wenn im feld plz buchstaben eingegeben werden das nicht funktioniert und umgekehrt für die felder wo nur buchstaben verwendet werden dürfen auch nur buchstaben eingegeben werden kann.

mein zweites prob ist das wenn ein feld vergessen worden ist und die hinweismeldung erscheint und bestätigt wird der cursor automatisch in das feld springt.

hier mal mein code :

function senden()
{

if(document.getElementById('vname').value == "")
  {
      alert("Bitte Vorname eingeben!");
      document.getElementById('vname').focus;
  }

if(document.getElementById('nname').value == "")
  {
      alert("Bitte Nachname eingeben!");
  }

if(document.getElementById('strasse').value == "")
  {
      alert("Bitte Straße eingeben!");
  }

if(document.getElementById('plz').value == "")
  {
      alert("Bitte PLZ eingeben!");
  }

if(document.getElementById('ort').value == "")
  {
      alert("Bitte Wohnort eingeben!");
  }
}

  1. Hi,

    mein erstes problem ist ich würde gerne wenn im feld plz buchstaben eingegeben werden das nicht funktioniert

    Sind bei Dir nur deutsche Adressen erlaubt?
    Z.B. in Großbritannien enthält der Postcode auch Buchstaben.
    In den USA sind m.W. die ersten zwei Zeichen ein Kürzel für den Bundesstaat, danach kommen noch 5 Ziffern.
    usw.

    und umgekehrt für die felder wo nur buchstaben verwendet werden dürfen auch nur buchstaben eingegeben werden kann.

    Auch hier täuscht man sich leicht: Straßennamen können z.B. Zahlen enthalten (Straße des 17. Juni, oder in Berlin "Straße 5", in Mannheim "A1", "B2" ...

    document.getElementById('vname').focus;

    Du erwähnst hier eine Referenz auf eine Funktion, statt sie auszuführen - dazu wäre die (leere) Parameterliste mit den Klammern erforderlich.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. hi andreas

      vielen dank für deine antwort.

      wegen plz - in meinem fall wären wirklich nur deutsche plz notwendig und ich würde einfach aus lerngründen wissen ob das möglich ist ein feld auf den inhalt zu prüfen. hab mir schon verschiedene tutorials gegeben, klappt aber irgendwie net.

      wegen straßen geb ich dir recht - habe ich nicht bedacht das es straße mit zahlen gibt, danke für hinweis.

      wegen focus - echt total sry ich bin noch voll der anfänger und verstehe nicht ganz was du meinst. nur mal das ihr meinen gedankengang versteht und eventuell korrigieren könnt :

      document.getElementById('vname')  : hier steuer ich doch das element mit id vname an.
      .focus;                           : hier sag ich doch das der focus auf angesteuertes element
                                          gesetzt werden soll

      1. habs gelöst :

        function senden() {
          if (document.formular1.vname.value == "") {
            alert("Bitte Ihren Vornamen eingeben!");
            document.formular1.vname.focus();
            return false;
          }
          if (document.formular1.nname.value == "") {
            alert("Bitte Ihren Nachnamen eingeben!");
            document.formular1.nname.focus();
            return false;
          }
          if (document.formular1.strasse.value == "") {
            alert("Bitte Ihre Straße eingeben!");
            document.formular1.strasse.focus();
            return false;
          }

        if (document.formular1.ort.value == "") {
            alert("Bitte Ihr Wohnort eingeben!");
            document.formular1.ort.focus();
            return false;
          }

        }

        jetzt bekomm ich meinen focus !

        muß nur noch plz auf inhalt prüfen

        1. Tach!

          muß nur noch plz auf inhalt prüfen

          Nimm einen Adressvalidierungsservice, wenn du wirklich echte Adressen brauchst. Allerdings gelingt es auch bei einem solchen problemlos eine im Internet gefundene Adresse einzugeben, statt der eigenen.

          Wenn wirklich eine Musterprüfung als Krücke reicht, nimm den <input type="number" und für ältere Browser reicht die serverseitige Musterprüfung. Valider wird es mit einer ausgefeilten Javascript-Lösung auch nicht.

          dedlfix.

          1. hi dedlfix

            danke für die antwort.

            hab mal mein input tag so gemacht :

            <input id ="plz" name="plz" type="number" size="5" maxlength="5">

            hab nur den type eingefügt.

            klappt leider immer noch nicht - kann immer noch das feld mit buchstaben füllen und absenden.

            1. Tach!

              hab nur den type eingefügt.
              klappt leider immer noch nicht - kann immer noch das feld mit buchstaben füllen und absenden.

              Hmm, da nahm ich doch an, dass die großen 5 das bereits können. Dem ist wohl doch nicht so.

              Mit Javscript kann man versuchen, die Eingabe (immer als String vorliegend) in eine Zahl umzuwandeln. Wenn das gelingt, ist es eine. Diese Problematik ist ja nicht neu und wie sowas gehen kann, findet man in Massen (beispielsweise mit isNaN()).

              dedlfix.

              1. Om nah hoo pez nyeetz, dedlfix!

                Mit Javscript kann man versuchen, die Eingabe (immer als String vorliegend) in eine Zahl umzuwandeln.

                Deine Postleitzahl ist keine Zahl.

                Matthias

                --
                1/z ist kein Blatt Papier.

                1. Hallo,

                  Mit Javscript kann man versuchen, die Eingabe (immer als String vorliegend) in eine Zahl umzuwandeln.
                  Deine Postleitzahl ist keine Zahl.

                  wenn man bereit ist, sich auf deutsche Postleitzahlen zu beschränken, ist die Prüfung aber ansatzweise sinnvoll, sie schließt wenigstens ein paar Falscheingaben aus.

                  Oder hättest du Bedenken, dass jemand "4.75", "-1080" oder "0x40" als Postleitzahl eingibt? ;-)

                  Und wenn man wirklich nur Ziffern erlaubt, hat man wieder ein Problem, sobald man doch mal über die Grenzen von DE hinaus will. Man muss gar nicht bis nach UK gehen (MudGuards Beispiel), schon im Nachbarland NL bestehen Postcodes aus vier Ziffern und zwei Buchstaben.

                  Ciao,
                   Martin

                  --
                  Du kannst dem Leben nicht mehr Tage geben.
                  Aber dem Tag mehr Leben.
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                  1. Om nah hoo pez nyeetz, Der Martin!

                    wenn man bereit ist, sich auf deutsche Postleitzahlen zu beschränken, ist die Prüfung aber ansatzweise sinnvoll, sie schließt wenigstens ein paar Falscheingaben aus.

                    und erlaubt ganz viele richtige nicht. 03130, beispielsweise.

                    Matthias

                    --
                    1/z ist kein Blatt Papier.

                    1. Hi,

                      wenn man bereit ist, sich auf deutsche Postleitzahlen zu beschränken, ist die Prüfung aber ansatzweise sinnvoll, sie schließt wenigstens ein paar Falscheingaben aus.
                      und erlaubt ganz viele richtige nicht. 03130, beispielsweise.

                      Warum nicht? Das ist eine gültige Oktalzahl.
                      Aber ich sehe das Problem, bei "09420" wäre es tatsächlich eins.

                      Ciao,
                       Martin

                      --
                      Mir geht es gut. Ich mag die kleinen Pillen, die sie mir dauernd geben.
                      Aber warum bin ich ans Bett gefesselt?
                      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                      1. ist es jetzt möglich oder net.
                        das prob mit der geklauten lösung hab ich verstanden.
                        gibt es denn keine möglichkeit ein inputfeld auf den inhalt zu prüfen.
                        z.b.
                        wenn jemand 96250 eingeben möchte, aber ausversehen 9625p eingibt, das eine meldung erscheint die den user darauf hinweißt.

                        es sind ausschließlich deutsche plz gefragt.

                        1. Hallo,

                          user darauf hinweißt.

                          den User darauf hinzuroten, könnte auffälliger sein.

                          scnr
                          Kalk

                          1. Hallo,

                            user darauf hinweißt.

                            den User darauf hinzuroten, könnte auffälliger sein.

                            scnr
                            Kalk

                            danke kalk
                            wie der user aufmerksam gemacht wird is egal - mir gehts um ne funktion in der ich prüfen kann ob zahlen oder buchstaben im feld stehen und bei buchstaben ne fehlermeldung kommt das die plz falsch ist

                            1. Hi,

                              wie der user aufmerksam gemacht wird is egal - mir gehts um ne funktion in der ich prüfen kann ob zahlen oder buchstaben im feld stehen und bei buchstaben ne fehlermeldung kommt das die plz falsch ist

                              wenn du wirklich nur deutsche Postleitzahlen brauchst, reichen für eine formale Prüfung zwei Kriterien:
                               * Die Eingabe muss genau fünf Zeichen lang sein
                               * Die Eingabe darf nur Ziffern enthalten
                              Wenn man RegEx zur Prüfung nehmen möchte, wäre das gesuchte Muster also /[1]{5}$/.
                              Ob die eingegebene fünfstellige Ziffernkombination auch eine *existierende* Postleitzahl darstellt, weißt du dann immer noch nicht; es ist, wie gesagt, nur eine formale Prüfung.

                              Im übrigen sollte diese Prüfung nicht bei jedem Tastendruck stattfinden; das wäre einerseits lästig, und erschwert möglicherweise auch dem Nutzer das Korrigieren der Eingabe. Stattdessen sollte die Prüfung beim Absenden (onsubmit) des Formulars erfolgen.

                              Jetzt alle Klarheiten beseitigt?

                              Ciao,
                               Martin

                              --
                              Wenn zwei dasselbe tun, sind sie vielleicht bald zu dritt.
                              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(

                              1. \d ↩︎

                              1. Hi,

                                * Die Eingabe muss genau fünf Zeichen lang sein
                                * Die Eingabe darf nur Ziffern enthalten
                                Wenn man RegEx zur Prüfung nehmen möchte, wäre das gesuchte Muster also /[1]{5}$/.

                                Wozu die [] um das \d?

                                Im übrigen sollte diese Prüfung nicht bei jedem Tastendruck stattfinden; das wäre einerseits lästig, und erschwert möglicherweise auch dem Nutzer das Korrigieren der Eingabe.

                                Nicht nur die Korrektur.
                                Wenn das Ding schon nach der ersten Ziffer schreit, ist das lästig.

                                cu,
                                Andreas

                                --
                                Warum nennt sich Andreas hier MudGuard?
                                O o ostern ...
                                Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.

                                1. \d ↩︎

                                1. Hallo,

                                  Wenn man RegEx zur Prüfung nehmen möchte, wäre das gesuchte Muster also /[1]{5}$/.
                                  Wozu die [] um das \d?

                                  weil ich bisher der Überzeugung war, diese Kurzzeichen seien nur innerhalb von Zeichenklassen zulässig.
                                  Ein Irrtum?

                                  Ciao,
                                   Martin

                                  --
                                  Lache, und die Welt wird mit dir lachen.
                                  Schnarche, und du schläfst allein.
                                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(

                                  1. \d ↩︎

                                  1. Hi,

                                    weil ich bisher der Überzeugung war, diese Kurzzeichen seien nur innerhalb von Zeichenklassen zulässig.
                                    Ein Irrtum?

                                    Ja.

                                    cu,
                                    Andreas

                                    --
                                    Warum nennt sich Andreas hier MudGuard?
                                    O o ostern ...
                                    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
              2. dank dir nochmal dedlfix

                hab ne lösung im netz gefunden - ich posts mal - falss es einer braucht

                js:
                function checkKey(objInput){
                    // Neues Zeichen aus Gesamtinhalt ermitteln
                    var strCheck = objInput.value;
                    strCheck = strCheck.substring((strCheck.length-1), strCheck.length);

                // Falls es sich nicht um eine Ziffer handelt
                    if(strCheck.search(/[0-9]/) == -1){
                      // Falls das Feld leer ist
                      if(objInput.value == "") return;

                // Letztes Zeichen entfernen
                      objInput.value = objInput.value.substr(0, (objInput.value.length-1));

                /* Falls bei Fehleingabe gesamter Inhalt gelöscht werden soll -> nächste Zeile auskommentieren */
                      //objInput.value = "";
                    }
                  }

                html:
                <input id ="plz" name="plz" type="number" size="5" maxlength="5" onkeyup="checkKey(this)">

                1. Moin,

                  hab ne lösung im netz gefunden - ich posts mal - falss es einer braucht

                  das ist nicht wirklich eine Lösung, sie funktioniert nicht einmal zuverlässig unter den Einschränkungen, die du dir selbst gesetzt hast.

                  function checkKey(objInput){

                  // Neues Zeichen aus Gesamtinhalt ermitteln
                      var strCheck = objInput.value;
                      strCheck = strCheck.substring((strCheck.length-1), strCheck.length);

                  // Falls es sich nicht um eine Ziffer handelt
                      if(strCheck.search(/[0-9]/) == -1){
                        // Falls das Feld leer ist
                        if(objInput.value == "") return;

                  // Letztes Zeichen entfernen
                        objInput.value = objInput.value.substr(0, (objInput.value.length-1));

                  /* Falls bei Fehleingabe gesamter Inhalt gelöscht werden soll -> nächste Zeile auskommentieren */
                        //objInput.value = "";
                      }
                    }

                    
                  Problemszenarien:  
                   \* Copy & Paste per Maus/Kontextmenü: Da wird onkeyup gar nicht ausgelöst, also auch  
                     nichts gecheckt. Jeder beliebige String kann ungeprüft eingefügt werden.  
                   \* Copy & Paste per Tastatur: Ich füge "27T300" ein, onkeyup löst aus, deine checkKey()  
                     erkennt das falsche Zeichen, schneidet aber stur das letzte Zeichen ab; übrig bleibt  
                     "27T30" im Eingabefeld.  
                   \* Editieren der Eingabe: Ich gebe "20382" ein, gehe dann mit dem Cursor drei Stellen  
                     nach links und ergänze ein "\*". checkKey() erkennt abermals einen Fehler, schneidet  
                     das letzte Zeichen ab, übrig bleibt "20\*38".  
                    
                  So long,  
                   Martin  
                  
                  -- 
                  Abraham sprach zu Bebraham: Kann i mal dei Cebra ham?  
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                  
                  1. Hi,

                    function checkKey(objInput){

                    // Neues Zeichen aus Gesamtinhalt ermitteln
                        var strCheck = objInput.value;
                        strCheck = strCheck.substring((strCheck.length-1), strCheck.length);

                    // Falls es sich nicht um eine Ziffer handelt
                        if(strCheck.search(/[0-9]/) == -1){
                          // Falls das Feld leer ist
                          if(objInput.value == "") return;

                    // Letztes Zeichen entfernen
                          objInput.value = objInput.value.substr(0, (objInput.value.length-1));

                    /* Falls bei Fehleingabe gesamter Inhalt gelöscht werden soll -> nächste Zeile auskommentieren */
                          //objInput.value = "";
                        }
                      }

                    
                    >   
                    > Problemszenarien:  
                    >  \* Copy & Paste per Maus/Kontextmenü: Da wird onkeyup gar nicht ausgelöst, also auch  
                    >    nichts gecheckt. Jeder beliebige String kann ungeprüft eingefügt werden.  
                    >  \* Copy & Paste per Tastatur: Ich füge "27T300" ein, onkeyup löst aus, deine checkKey()  
                    >    erkennt das falsche Zeichen, schneidet aber stur das letzte Zeichen ab; übrig bleibt  
                    >    "27T30" im Eingabefeld.  
                      
                    Nein, es erkennt den Fehler nicht. Denn es wird ja nur das letzte Zeichen angeguckt.  
                      
                    wegen  
                    
                    > >     strCheck = strCheck.substring((strCheck.length-1), strCheck.length);  
                      
                      
                    
                    >  \* Editieren der Eingabe: Ich gebe "20382" ein, gehe dann mit dem Cursor drei Stellen  
                    >    nach links und ergänze ein "\*". checkKey() erkennt abermals einen Fehler, schneidet  
                    >    das letzte Zeichen ab, übrig bleibt "20\*38".  
                      
                    dito. Der Fehler wird nicht erkannt.  
                      
                    cu,  
                    Andreas
                    
                    -- 
                    [Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)  
                    [O o ostern ...](http://ostereier.andreas-waechter.de/)  
                      
                    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.  
                    
                    
                    1. Hallo,

                      Nein, es erkennt den Fehler nicht. Denn es wird ja nur das letzte Zeichen angeguckt.

                      da warst du wohl einen Augenblick schneller ...

                      Ciao,
                       Martin

                      --
                      "Mein Klassenlehrer hat mir damals gesagt, ich würde bestimmt mal bei der Bahn Karriere machen." - "Wieso das denn?" - "Weil ich schon als Schüler immer zu spät kam."
                      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                  2. Ergänzung:

                    * Copy & Paste per Tastatur: Ich füge "27T300" ein, onkeyup löst aus, deine checkKey()
                       erkennt das falsche Zeichen, schneidet aber stur das letzte Zeichen ab; übrig bleibt
                       "27T30" im Eingabefeld.
                    * Editieren der Eingabe: Ich gebe "20382" ein, gehe dann mit dem Cursor drei Stellen
                       nach links und ergänze ein "*". checkKey() erkennt abermals einen Fehler, schneidet
                       das letzte Zeichen ab, übrig bleibt "20*38".

                    In diesen beiden Fällen passiert gar nichts, der Fehler wird nicht erkannt, weil checkKey() immer nur das letzte Zeichen im String prüft. Den Aufruf von substr() hatte ich vorhin völlig übersehen ...

                    Ciao,
                     Martin

                    --
                    Ja, ja ... E.T. wusste schon, warum er wieder nach Hause wollte.
                    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      2. Hi,

        wegen straßen geb ich dir recht - habe ich nicht bedacht das es straße mit zahlen gibt, danke für hinweis.

        Da gibt's wirklich verrückte Sachen. Neben Buchstaben, Ziffern, Punkten und Bindestrichen ist z.B. auch ein ' möglich ("An't Schwesternbüschken", "Up'n Feld", "G'steinigt" - ja die gibt's alle wirklich!)

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
        1. Hallo,

          wegen straßen geb ich dir recht - habe ich nicht bedacht das es straße mit zahlen gibt, danke für hinweis.
          Da gibt's wirklich verrückte Sachen. Neben Buchstaben, Ziffern, Punkten und Bindestrichen ist z.B. auch ein ' möglich ("An't Schwesternbüschken", "Up'n Feld", "G'steinigt" - ja die gibt's alle wirklich!)

          nicht ganz so überraschend sind Bindestriche: Thomas-Mann-Straße.
          Und den Punkt, der gern und oft zur Abkürzung verwendet wird (Hauptstr.), möchte man sicher auch nicht verbieten.
          Und man denke bitte auch an Straßen, die nach ausländischen Berühmtheiten benannt sind und daher Buchstaben jenseits des deutschen Alphabets enthalten.

          Ciao,
           Martin

          --
          Lieber mit Betty im Wald
          als mit Waldi im Bett.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Hi,

            Da gibt's wirklich verrückte Sachen. Neben Buchstaben, Ziffern, Punkten und Bindestrichen ist z.B. auch ein ' möglich ("An't Schwesternbüschken", "Up'n Feld", "G'steinigt" - ja die gibt's alle wirklich!)

            nicht ganz so überraschend sind Bindestriche: Thomas-Mann-Straße.

            Bindestriche hab ich ja erwähnt.

            Und den Punkt, der gern und oft zur Abkürzung verwendet wird (Hauptstr.), möchte man sicher auch nicht verbieten.

            Punkte auch. Kommen auch gerne mal mittendrin vor:
            Bgm.-Johann-Müller-Str.
            J.-S.-Bach-Str.
            usw.

            Und man denke bitte auch an Straßen, die nach ausländischen Berühmtheiten benannt sind und daher Buchstaben jenseits des deutschen Alphabets enthalten.

            Stimmt. Die gibt's auch.

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            O o ostern ...
            Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.