Markus: zahl.IndexOf('.') != 2 funktioniert nicht

Hi
ich habe zwei Probleme an denen ich verzweifel!
Bei einer Datumsabfrage soll soll unteranderem geprüft werden, ob das Format stimmt (TT.MM.JJJJ). Die Abfrage, das vier Zahlen nach den letzten Punkt kommen sollen funktioniert. Die erst Abfrage auf die ersten beiden Zahlen und dann ein Punkt jedoch nicht. Warum???

Das zweite Problem welches ich habe, ist das wenn in die if Schleife gesprungen wird und die Aufforderung "Bitte geben Sie eine gültiges Datum ein" erschienen ist, wird der weitergehende Befehl trotzdem ausgeführt, ob er das nicht dürfte (z.B. Formular wird abgeschickt)

zahl=document.forms[0].elements[0].value;
if (....|| zahl.IndexOf('.') != 2 || zahl.lastIndexOf('.') == zahl.length-4)
{
     alert ("Bitte geben Sie eine gültiges Datum ein )
     document.forms[0].elements[0].focus();
     return (false);
}

Grüße Markus

  1. Hi,

    TT.MM.JJJJ

    0123456789 (length = 10)

    if (....|| zahl.IndexOf('.') != 2 || zahl.lastIndexOf('.') == zahl.length-4)

    10      -4 = 6, Du suchst aber doch den Punkt an Position 5, oder?

    Gruß,
    Stefan

  2. Hi,

    [...] funktioniert. [...] jedoch nicht.

    "funktioniert nicht" funktioniert nicht. Wo ist die Problembeschreibung?

    if (....|| zahl.IndexOf('.') != 2 || zahl.lastIndexOf('.') == zahl.length-4)

    string.IndexOf() kenne ich nicht. Meinst Du string.indexOf()?

    Hier forderst Du, daß ein Punkt an fünftletzter Stelle ist (richtig), verbietest jedoch den Punkt an dritter Stelle. Hast Du Dir die entsprechenden zahl.indexOf() eigentlich mal mit alert angesehen?

    Das zweite Problem welches ich habe, ist das wenn in die if Schleife

    if ist eine Bedingung, keine Schleife. Eine Schleife wird n mal durchlaufen, if jedoch nur 0 oder 1 mal.

    wird der weitergehende Befehl trotzdem ausgeführt, ob er das nicht dürfte (z.B. Formular wird abgeschickt)

    Verhinderst Du denn den Formularversand, der nebenbei bemerkt nicht zwingend etwas mit JavaScript zu tun hat?

    Cheatah

    1. Hi,

      Hier forderst Du, daß ein Punkt an fünftletzter Stelle ist (richtig),

      Nein, er fragt ab, ob an viertletzter Stelle (length-4) ein Punkt ist. Insgegsamt ist außerdem die Abfrage etwas wirr, richtig müßte sie lauten:

      if(zahl.length != 10 || zahl.indexOf(".") != 2 || zahl.lastIndexOf(".") != zahl.length-5)

      Allerdings wäre das wohl immer noch keine ausreichende Validierung eines gültigen Datums.

      Gruß,
      Stefan

      1. Hi,

        Hier forderst Du, daß ein Punkt an fünftletzter Stelle ist (richtig),

        Nein, er fragt ab, ob an viertletzter Stelle (length-4) ein Punkt ist. Insgegsamt ist außerdem die Abfrage etwas wirr, richtig müßte sie lauten:

        if(zahl.length != 10 || zahl.indexOf(".") != 2 || zahl.lastIndexOf(".") != zahl.length-5)

        Allerdings wäre das wohl immer noch keine ausreichende Validierung eines gültigen Datums.

        Ok, was müsste ich den noch machen?
        Die if-Abfrage funktioniert jetzt super! Danke für die Hilfe.

        Hast Du auch noch eine Idee, weshalb der weiterführende Befehl nicht verhindert wird? Oder wie ich Ihn aufhalten kann?
        Müsste das nicht mit "document.forms[0].elements[0].focus();" funktionieren?

        if (...|| zahl.length != 10 || zahl.indexOf(".") != 2 || zahl.lastIndexOf(".") != zahl.length-5)
        {
           alert ("Bitte geben Sie eine gültiges Datum ein \nz.B." +von)
           document.forms[0].elements[0].focus();
           return (false);
        }

        1. 'Tag

          return (false);

          Muß das nicht

          return false;

          (also ohne Klammern) heißen? oder geht das beides?

          axel

          1. 'Tag

            return (false);

            Muß das nicht

            return false;

            (also ohne Klammern) heißen? oder geht das beides?

            axel

            Ich weiß es leider nicht !!

            Ich werde es ausprobieren
            Markus

    2. Hi,

      "funktioniert nicht" funktioniert nicht. Wo ist die Problembeschreibung?

      Die if Bedingung wird 0 mal durchlaufen, obwohl sie es sollte

      if (....|| zahl.IndexOf('.') != 2 || zahl.lastIndexOf('.') == zahl.length-4)

      Hier forderst Du, daß ein Punkt an fünftletzter Stelle ist (richtig), verbietest jedoch den Punkt an dritter Stelle.

      Wieso verbiete ich Ihn?? Siehe http://www.teamone.de/selfhtml/tecl.htm#a16

      wird der weitergehende Befehl trotzdem ausgeführt, ob er das nicht dürfte (z.B. Formular wird abgeschickt)

      Verhinderst Du denn den Formularversand, der nebenbei bemerkt nicht zwingend etwas mit JavaScript zu tun hat?

      (z.B. Formularversand (beispielsweise)) Es wird ein Servlet aufgerufen. Wie verhindere ich den Aufruf

      string.lastindexOf()
      Ermittelt das letzte Vorkommen eines Zeichens oder einer Zeichenkette innerhalb einer Zeichenkette und gibt zurück, an wievielter Stelle das Zeichen in der Zeichenkette steht.

      string.indexOf()
      Ermittelt das erste Vorkommen eines Zeichens oder einer Zeichenkette innerhalb einer Zeichenkette und gibt zurück, an wievielter Stelle das Zeichen in der Zeichenkette steht.

      Grüße Markus