Daniela Notroff: warum funktioniert meine for-Schleife nicht?

Hallo!

Ich moechte eine Formularüberprüfung machen, bei der
die Telefonnummer ein bestimmtes Format haben soll,
nämlich z.B. +49.0011234567 .
Also habe ich die untenstehende for-Schleife entwickelt.
Aber die funktioniert nicht und ich weiss nicht warum.
Kann mir bitte einer von Euch helfen?

Vielen Dank im Voraus!

Daniela

var chkZ = 1;
     for(i=0;i<document.formular.phone.value.length;++i)
       if(document.formular.phone.value.charAt(i) < "0"
       || document.formular.phone.value.charAt(i) > "9"
    || document.formular.phone.value.charAt(1) != "+"
    || document.formular.phone.value.charAt(4) != ".")
   chkZ = -1;
    if(chkZ == -1)
 {
    alert("Bitte die richtige Schreibweise der Telefonnummer beachten!!!");
    document.formular.phone.focus();
    return false;
    }

  1. Hallo

    wieso? Die Schleife funktioniert doch!
    Du fragst bei *jedem* Zeichen ab,
    ob es <0 oder >9 oder !="+" oder !="." ist.
    Du brauchst gar nicht die ganze Schleife durchzuprüfen. Teste die Abfrage nur mit dem ersten Zeichen - mit dem Plus-Zeichen.
    "+" < "0" oder > "9" - alleine das trifft schon zu und chkZ wird -1.

    Du willst
    anstatt
     (   a < "0" || a > "9"   || a != "+" || a != "." )
    sicherlich Folgendes:
     ( ( a < "0" || a > "9" ) && a != "+" && a != "." )

    good luck
       Manfred

    1. Die Schleife tut es nicht, denn wenn ich die richtige Schreibweise beacht, wird trotzdem die Fehlermeldung ausgegeben.

      Insgesamt habe ich für die Telefonnummer 3 Abfragen:
      1. ob das Feld leer ist (funktioniert)
      2. ob ein "+" und ein "." enthalten sind (funktioniert)
      3. diese Abfrage, die dazu dient, herauszufinden, ob an 1. Stelle ein "+" steht und an vierter Stelle ein ".".

      Aber 3. funktioniert nicht, wie oben schon gesagt.
      Und ich möchte, dass jedes Zeichen überprüft wird.

      Soweit ich das sehe, stimmt irgendwas bei
          || document.formular.phone.value.charAt(1) != "+"
          || document.formular.phone.value.charAt(4) != ".")
      nicht, aber ich weiss absolut nicht was.

      Ist es vielleicht möglich, dass man irgendwie in der for-Schleife keine direkte Abfrage auf ein bestimmtes Zeichen machen kann?
      Etwas anderes kann ich mir nicht erklären...

      Hier nochmal die komplette Schleife:

      var chkZ = 1;
           for(i=0;i<document.formular.phone.value.length;++i)
             if(document.formular.phone.value.charAt(i) < "0"
             || document.formular.phone.value.charAt(i) > "9"
             || document.formular.phone.value.charAt(1) != "+"
             || document.formular.phone.value.charAt(4) != ".")
         chkZ = -1;
          if(chkZ == -1)
       {
          alert("Die Telefonnummer muss eine Zahl sein!");
          document.formular.phone.focus();
          return false;
          }

      Daniela

      1. Hallo,

        jaja, manchmal sieht man den Baum vor lauter Wald nicht.

        Ich habe voher geschrieben:

        Du willst
        anstatt
         (   a < "0" || a > "9"   || a != "+" || a != "." )
        sicherlich Folgendes:
         ( ( a < "0" || a > "9" ) && a != "+" && a != "." )

        Der Fehler liegt hier beim *or* ||, es muß hier *and* sein (beachte bitte auch die Klammersetzung rund um <"0" und >"9".

        also statt

        if( document.formular.phone.value.charAt(i) < "0"
               ||  document.formular.phone.value.charAt(i) > "9"
               ||  document.formular.phone.value.charAt(1) != "+"
               ||  document.formular.phone.value.charAt(4) != ".")

        gehört
                  if((document.formular.phone.value.charAt(i) < "0"
                   || document.formular.phone.value.charAt(i) > "9"
                     )
                   && document.formular.phone.value.charAt(1) != "+"
                   && document.formular.phone.value.charAt(4) != ".")

        Manfred