sunny: Bestimmtes Format bei Formulareingabe erzwingen

Hallo!

Ich hab ein Formularfeld, dass nicht unbedingt ausgefüllt werden muss, wenn es aber ausgefüllt wird, dann sollte es in einem bestimmten Datumsformat (MM.JJJJ) ausgefüllt werden.

Leider bekomm ich das nicht hin, das erste Problem: Kann ich eine IF-Bedingung überhaupt so verschachteln?

if(document.xxx.xxx.value != "" {
 if(document.xxx.xxx.indexOf('.') == -1); {
  alert("Bitte das Datum im richtigen Format eingeben!");
  document.xxx.xxx.focus();
  return false;
 }
}

Bekomm nämlich immer ein Syntaxfehler: ')' erwartet.
Wie verschachtelt man die IF-Bedingung in JavaScript richtig?

Und das zweite Problem: Ich überprüfe hier ja nur, ob ein Punkt vorhanden ist, das müsste aber doch auch genauer gehen (mit Substring etc.!?) - sodass genau überprüft wird, ob die ersten beiden Werte Ziffern sind, dann der Punkt kommt und dann noch 4 Ziffern. Kann mir da vielleicht jemand einen kleinen Ansatz geben? Ich weiß gar nicht, wie ich damit beginnen soll. Zuerst den String zerlegen und dann Teilstrings überprüfen, oder? Würd mich sehr über kleine Hilfen freuen.

Liebe Grüße,
sunny

  1. hi

    if(document.xxx.xxx.value != "") {
    if(document.xxx.xxx.indexOf('.') == -1); {
      alert("Bitte das Datum im richtigen Format eingeben!");
      document.xxx.xxx.focus();
      return false;
    }
    }

    versuch dich doch mal mit split() damit kann man schon mal überprüfen ob der anwender auch *.*.* diese formatierung benutzt. mit split SPLITEST du dir das in der teile auf und dann kann du jeden einzelt auf das richtige format überprüfen. (ob zum beispiel de dritte teil des ergebnisses von split() aus 4 Zahlen besteht usw.

    grüße christian

    1. Hallo!

      Also ich machs jetzt so:

      if(document.onlinebewerbung.beruf_zeitraum_von.value.indexOf('.') == -1) {
          alert("1: Bitte geben Sie das Datum im richtigen Format an!");
          document.onlinebewerbung.beruf_zeitraum_von.focus();
          return false;
         }
         var datum = document.onlinebewerbung.beruf_zeitraum_von.value;
         var ziffern = datum.split(".");
         var monat = (ziffern[0]);
         var jahr = (ziffern[1]);
         if(monat != "01") {
           alert = ("2: Bitte geben Sie das Datum im richtigen Format an!");
           document.onlinebewerbung.beruf_zeitraum_von.focus();
           return false;
         }

      Zuerst überprüfen, ob ein Punkt vorhanden ist, und dann splitten.

      Alerdings liegt anscheinend ein Fehler in der unteren IF-Bedingung, die ich erstmal ganz einfach gehalten hätte zum Testen. Auch wenn ich im Formularfeld 01.irgendwas eingebe gibts kein Alert. Was ist denn hier falsch?

      Lg,
      sunny

      PS: Das mit der verschachtelten if-Bedingung hab ich vorerst einmal weggelassen. Das Ganze soll ja eigentlich nur durchgeführt werden, falls etwas ins Feld eingegeben wurde.

      1. hi,

        if(document.onlinebewerbung.beruf_zeitraum_von.value.indexOf('.') == -1) {
            alert("1: Bitte geben Sie das Datum im richtigen Format an!");
            document.onlinebewerbung.beruf_zeitraum_von.focus();
            return false;
           }
           var datum = document.onlinebewerbung.beruf_zeitraum_von.value;
           var ziffern = datum.split(".");
           var monat = (ziffern[0]);
           var jahr = (ziffern[1]);

        if(monat.length != 2) {

        alert = ("2: Bitte geben Sie das Datum im richtigen Format an!");
             document.onlinebewerbung.beruf_zeitraum_von.focus();
             return false;
           }

        gehts nicht so besser?

        grüße

        1. Hallo!

          if(monat.length != 2) {

          -> Überprüft aber nur wieviele Zeichen, oder? Aber nicht obs auch Zahlen sind.

          Übrigens ich kann (auch mit dem "neuen" if) in das Formularfeld eingeben was ich will - ich krieg kein Alert :(

          Hast du eine Ahnung warum?

          Lg,
          sunny

          1. Hast du eine Ahnung warum?

            alert = ("2: Bitte geben Sie das Datum im richtigen Format an!");
                  ^ Das kann ja ned gehen ;)

            Sorry!

            Aber wie kann ich denn nun am besten überprüfen, ob auch Zahlen vorkommen? Ich könnte jetzt sagen, der Wert muss entweder 01 oder 02 oder 03 ... oder 12 sein, aber das ist ja relativ umständlich, oder? Da gibts bestimmt eine bessere Lösung!?

            Lg,
            sunny

          2. du hast beim alert ja auch geschrieben alert = (...)

            musst alert() so aufrufen.

            isNaN() gibt true zurück wenn keine zahl angegen wurde. musst du noch mit einbauen.

            bye

            1. du hast beim alert ja auch geschrieben alert = (...)

              Ich weiß - sorry!

              isNaN() gibt true zurück wenn keine zahl angegen wurde. musst du noch mit einbauen.

              Danke! Hab jetzt also folgende function:

              if(document.onlinebewerbung.beruf_zeitraum_von.value.indexOf('.') == -1) {
                  alert("1: Bitte geben Sie das Datum im richtigen Format an!");
                  document.onlinebewerbung.beruf_zeitraum_von.focus();
                  return false;
                 }
                 var datum = document.onlinebewerbung.beruf_zeitraum_von.value;
                 var ziffern = datum.split(".");
                 var monat = (ziffern[0]);
                 var jahr = (ziffern[1]);
                 var datum = new Date();
                 var akt_jahr = datum.getFullYear();
                 if(monat.length != 2) {
                   alert("2: Bitte geben Sie das Datum im richtigen Format an!");
                   document.onlinebewerbung.beruf_zeitraum_von.focus();
                   return false;
                 }
                 if(isNaN(monat) == true) {
                   alert("3: Bitte geben Sie das Datum im richtigen Format an!");
                 }
                 if(jahr.length != 4) {
                   alert("4: Bitte geben Sie das Datum im richtigen Format an!");
                   document.onlinebewerbung.beruf_zeitraum_von.focus();
                   return false;
                 }
                 if(isNaN(jahr) == true) {
                   alert("5: Bitte geben Sie das Datum im richtigen Format an!");
                 }
                 if(jahr < 1900 || jahr > akt_jahr) {
                   alert("6: Bitte geben Sie das Datum im richtigen Format an!");
                   document.onlinebewerbung.beruf_zeitraum_von.focus();
                   return false;
                 }
              }

              Kannst Du mir vielleicht auch noch sagen, wie ich nun eine verschachtelte if-Bedingung erstellen kann, sodass all die weiteren if´s nur ausgeführt werden, falls wirklich etwas ins Feld eingetragen wurde? Mit einfach einem if im if funktionierts leider nicht. Kann man in JavaScript keine verschachtelten Bedingungen erstellen?

              Danke für die tolle Hilfe bisher! Hab mal wieder einiges dazugelernt ;)

              Lg,
              sunny

              1. Hi,

                ein return false; hab ich vergessen - bin irgendwie immer zu schnell mit posten ;)

                Aber daran liegts wohl nicht, dass sich die Bedingung nicht verschachteln lässt!?

                Lg,
                sunny

              2. eigentlich geht verschachteln!
                machs doch so:

                if (feldnichtleer) {

                if(formatfalsch) {
                    alert(..);
                 }
                 else if(keinezahl) {
                   alert(...)
                 }

                usw

                }

                grüße

                1. Hi,

                  wenn ich Folgendes mach:

                  function checkformular() {

                  if(document.onlinebewerbung.beruf_zeitraum_von.value != "") { <-- <-- <--

                  if(document.onlinebewerbung.beruf_zeitraum_von.value.indexOf('.') == -1) {
                      alert("1: Bitte geben Sie das Datum im richtigen Format an!");
                      document.onlinebewerbung.beruf_zeitraum_von.focus();
                      return false;
                     }
                     var datum = document.onlinebewerbung.beruf_zeitraum_von.value;
                     var ziffern = datum.split(".");
                     var monat = (ziffern[0]);
                     var jahr = (ziffern[1]);
                     var datum = new Date();
                     var akt_jahr = datum.getFullYear();
                     else if(monat.length != 2) {
                       alert("2: Bitte geben Sie das Datum im richtigen Format an!");
                       document.onlinebewerbung.beruf_zeitraum_von.focus();
                       return false;
                     }
                     else if(isNaN(monat) == true) {
                       alert("3: Bitte geben Sie das Datum im richtigen Format an!");
                     }
                     else if(jahr.length != 4) {
                       alert("4: Bitte geben Sie das Datum im richtigen Format an!");
                       document.onlinebewerbung.beruf_zeitraum_von.focus();
                       return false;
                     }
                     else if(isNaN(jahr) == true) {
                       alert("5: Bitte geben Sie das Datum im richtigen Format an!");
                    return false;
                     }
                     else if(jahr < 1900 || jahr > akt_jahr) {
                       alert("6: Bitte geben Sie das Datum im richtigen Format an!");
                       document.onlinebewerbung.beruf_zeitraum_von.focus();
                       return false;
                     }
                   } <-- <-- <--
                  }

                  bekomm ich immer einen Syntaxfehler. Aber leider nix Genaueres.
                  Scheint so nicht zu funktionieren!?

                  Lg,
                  sunny

                  1. Hi,

                    versuchs mal so

                    function checkformular() {

                    if(document.onlinebewerbung.beruf_zeitraum_von.value != "") { <-- <-- <--

                    var datum = document.onlinebewerbung.beruf_zeitraum_von.value;
                        var ziffern = datum.split(".");
                        var monat = (ziffern[0]);
                        var jahr = (ziffern[1]);
                        var datum = new Date();
                        var akt_jahr = datum.getFullYear();

                    if(document.onlinebewerbung.beruf_zeitraum_von.value.indexOf('.') == -1) {
                         alert("1: Bitte geben Sie das Datum im richtigen Format an!");
                         document.onlinebewerbung.beruf_zeitraum_von.focus();
                         return false;
                        }
                            else if(monat.length != 2) {
                          alert("2: Bitte geben Sie das Datum im richtigen Format an!");
                          document.onlinebewerbung.beruf_zeitraum_von.focus();
                          return false;
                        }
                        else if(isNaN(monat) == true) {
                          alert("3: Bitte geben Sie das Datum im richtigen Format an!");
                        }
                        else if(jahr.length != 4) {
                          alert("4: Bitte geben Sie das Datum im richtigen Format an!");
                          document.onlinebewerbung.beruf_zeitraum_von.focus();
                          return false;
                        }
                        else if(isNaN(jahr) == true) {
                          alert("5: Bitte geben Sie das Datum im richtigen Format an!");
                       return false;
                        }
                        else if(jahr < 1900 || jahr > akt_jahr) {
                          alert("6: Bitte geben Sie das Datum im richtigen Format an!");
                          document.onlinebewerbung.beruf_zeitraum_von.focus();
                          return false;
                        }
                      } <-- <-- <--
                     }

                    mach er nicht wenn zwischen:

                    if(..) {
                    }
                    -- an dieser stelle was zwischensteht--
                    else if (..) {
                    }

                    grüße

                    1. Hi Christian,

                      mit weiteren Einrückungen beim else if funktionierts! Vielen Dank!

                      Lg,
                      sunny