[REGEX] datum darf nur 31.12.9999

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [REGEX] datum darf nur 31.12.9999

    hallo user

    in meinem terminkalender soll das datum (vorerst) nach dem muster tt.mm.yyyy eingetragen werden, nun würde ich gerne prüfen ob bei tt maximal die zahl 31 und bei mm nur maximal ne 12 drin vorkommt.

    ich dachte ich löse das mit regex, was ich bis jetzt hab ist:
    Code:
    '/^\d{2}\.\d{2}\.\d{4}$/'
    soweit so gut, nur wie bring ich der patter die 31 und 12 geschichte bei ?

    kennt wer sich damit aus ?
    4cms.de

  • #2
    PHP-Code:
    $datum explode('.'$input);

    $datum[0] = max((int)$datum[0], 31);
    $datum[1] = max((int)$datum[1], 12);
    $datum[2] = max((int)$datum[2], 9999);
    $datum implode('.'$datum);

    if (
    $datum != $input)
      echo 
    'Komisch!'
    Wobei eine Prüfung mit strtotime wohl besser wäre...
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Code:
      $day = '((0[1-9])|([1-2][0-9])|(30|31))';
      $month = '((0[1-9])|(1[0-2]))';
      $date = '/^'.$day.'\.'.$month.'\.\d{4}$/'
      ungetestet

      Kommentar


      • #4
        [REGEX] datumcheck

        danke euch beiden
        leider kann ich das nicht testen, mein provider brauch den ganzen tag um ne gecraschte platte von meinem server zu tauschen

        ich gebe aber rückmeldung sobald ich weiterbasteln kann.

        gibt es eingendlich eine seite oder ein tool mit dem ich regex testen kann und die/das ihr mir empfehlen könnt ?

        Gruß bUTschy
        4cms.de

        Kommentar


        • #5
          ah, ich hab da was gefunden

          http://pcre.nophia.de/evaluate

          mal checken wie sich das ding bedienen läßt
          4cms.de

          Kommentar


          • #6
            Re: [REGEX] datum darf nur 31.12.9999

            also so gehts am leichtesten:

            Code:
            if (preg_match('/^(\d{2})\.(\d{2})\.(\d{4})$/', $date, $hits)
                 && checkdate($hits[2], $hits[1], $hits[3])) {
               // richtiges datum
            }
            der vorteil ist das man so auch z.b. den 31.02.2000 umgehen kann

            Kommentar


            • #7
              PHP-Code:
              $datum explode('.',$datum);
              if(
              checkdate($datum[1],$datum[0],$datum[2]) && $datum[2]<10000){
                  echo 
              'Datum ist gültig';
              }else{
                 echo 
              'Dieses Datum akzeptiere ich nicht';

              Nur auf die Maximalwerte zu prüfen macht nicht soviel Sinn, denn dann würde auch ein 31.02.2005 als gültig angesehen werden. Den RegExp brauchst du imho gar nicht, denn das macht checkdate() besser...

              Gruss

              tobi
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar

              Lädt...
              X