Ankündigung

Einklappen
Keine Ankündigung bisher.

Datetime validation

Einklappen

Neue Werbung 2019

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

  • [CodeIgniter] Datetime validation

    Guten Abend liebe Community

    Ich arbeite gerade an einem Projekt bei dem ein Nutzer selber Termine hinzufügen kann. Das klappt auch super.

    Dann wollte ich es validieren.
    Es klappt mit allen Feldern, nur nicht mit dem datetime, da er immer sagt das das Format inkorrekt sei.

    Der Nutzer soll folgendes Format eingeben:

    H:i d.m.Y

    Also es muss irgendetwas mit den rules nicht Stimmen, da es ohne diese funktioniert. Als Anhang deshalb noch das Array für die Validation der datetime.

    PHP-Code:
    array(
            
    'field' => 'date',
            
    'label' => 'Datum/Uhrzeit',
            
    'rules' => 'required|regex_match[\'/^([0-9]{2})[\:]([0-9]{2})[\ ]' '([0-9]{2})([\.])([0-9]{2})([\.])([0-9]{4})$/\']',
            
    'errors' => array(
                
    'required' => 'Das Feld %s muss ausgefüllt werden.',
                
    'regex_match' => 'Das Feld %s muss in dem Format H:i dd.mm.YY sein (siehe Beipsiel im Feldnamen!)'
            

    Vielen Dank im voraus und Euch noch einen schönen Abend

    ----------------
    Gruß Train

  • #2
    hmm ... mir fällt nur auf das in Deinem RegEx das Jahr 4-stellig sein muss(?) und das es so theoretisch reichen müsste
    ^[0-9]{2}:[0-9]{2} [0-9]{2}\.[0-9]{2}\.[0-9]{4}$
    Heilung bei codebedingtem Augenkrebs

    Kommentar


    • #3
      Ich sehe da kein regex_match: https://ellislab.com/codeigniter/use...#rulereference

      Auch ist das keine "native PHP Function" im sinne von Core-Function, hast du die selbst definiert ?
      [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

      Kommentar


      • #4
        Train

        Bitte keinen Code (vor allem so ein kleines Schnipselchen) als Anhang mitgeben, sondern direkt in den PHP-Tags angeben. Ich hab das oben mal gemacht.

        Danke!
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5

          Danke erstmal für die Antworten!

          Ich habe das mit dem regex_match in einem Forum gefunden als Ansatz, wurde dort aber auch nicht gelöst.
          Habe dann sehr lange probiert, gesucht und herum gefragt und habe schließlich eine Lösung gefunden es im Format H:i d.m.Y zu machen.

          Hier der Code dafür:

          PHP-Code:
           array(
            
          'field' => 'date',
            
          'label' => 'Datum/Uhrzeit',
            
          'rules' => 'required|regex_match[/^(\d{2}\:\d{2}) (\d{2}\.\d{2}\.\d{4})$/]',
            
          'errors' => array(
                       
          'required' => 'Das Feld %s muss ausgefüllt werden.',
                       
          'regex_match' => 'Das Feld %s muss in dem Format H:i dd.mm.YY sein (siehe Beipsiel im Feldnamen!)'
            

          Trotzdem Danke nochmal an alle für die Hilfe

          Kommentar


          • #6
            Hier hast du ein bischen Code, um einen regulären Ausdruck zu erstellen, der zumindest halbwegs sinnvoll ein Datum prüft.
            Der fängt zwar nicht den Fall "31.02.2015" ab, aber besser als das was du da oben benutzt...
            PHP-Code:
            // use a date format string as source
            $dateformatRegExp 'Y/m/d'// or: 'd.m.Y' or: 'm.d/Y' 

            // build the regular expression from date parts
            $dayPart '(0?[1-9]|[12][0-9]|3[01])'// (0)1 - 31
            $monthPart '(0?[1-9]|1[012])'// (0)1 - 12
            $yearPart '((18|19|20|21)[0-9][0-9])'// 1800 - 2199

            // do some simple quoting (but do NOT quote everything)
            $dateformatRegExp str_replace('\\''\\\\'$dateformatRegExp);
            $dateformatRegExp str_replace('.''\.'$dateformatRegExp);
            $dateformatRegExp str_replace('Y'$yearPart$dateformatRegExp);
            $dateformatRegExp str_replace('m'$monthPart$dateformatRegExp);
            $dateformatRegExp str_replace('d'$dayPart$dateformatRegExp);
                    
            // delimiter and start/end string matching
            $datecheckPattern '~^'.$dateformatRegExp.'$~'
            Stunde/Minute Checks kannst du auf dieser Basis mit Sicherheit selber hinzufügen
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              Ok, also wenn es doch einfach nur eine Datumsvalidierung sein soll, ohne irgendwelche CodeIgniter internen Validierungen zu nutzen, würd ich tatsächlich doch wieder meinen ursprünglichen Vorschlag rauskramen und das DateTime Object von PHP nutzen http://php-de.github.io/jumpto/datetime/ ... für Dein Format könnte das z.B. so aussehen:

              PHP-Code:
              $value '12:12 05.05.99';

              if (
              false === isValidDateFormat($value'H:i m.d.y')) {
                  echo 
              'Fehler 123';
              } else {
                  echo 
              'alles bestens';
              }

              function 
              isValidDateFormat($value$format)
              {
                  
              $dt = \DateTime::createFromFormat($format$value);
                  return 
              $dt && $dt->format($format) == $value;

              Grüsse - Stef

              P.S. Vorteil von DateTime ist u.a. auch, Du musst Dich um Dinge wie "wieviel Tage hat Monat x überhaupt ...etc" nicht kümmern.
              Heilung bei codebedingtem Augenkrebs

              Kommentar


              • #8
                Danke für Eure Antworten und vor allem an dich nimmneun ich werde es gleich mal umsetzen!

                -------------------------
                Gruß Train

                Kommentar

                Lädt...
                X