Philip P.: Regulärer Ausdruck: Datumsformat prüfen. Wie korrekt zuweisen?

Guten Morgen!

In meinem Formular existiert ein Feld namens "date". In der Datenbank selbst ist zwar das Feld als Datumsfeld im Format YYYY-MM-DD eingestellt, aber trotzdem ist es jetzt möglich, einfach Buchstaben einzugeben - weil nämlich eine Überprüfung fehlt, bevor der Eintrag in der DB gemacht wird.

Vor mir habe ich das MUT-Buch "PHP 5 in 14 Tagen" von Jörg Krause. Dort werden auch die regulären Ausdrucke erklärt und wie man bestimmen kann, was an jeder Stelle stehen muss.

So sieht der reguläre Ausdruck aus:
~(200)\d-[-](0[1-9]|[12][0-9]|3[01]~

Folgendes ist erlaubt:
200x-MM-DD
MM = 01-12
DD = 01-31

Aber wie weise ich dem Datumsfeld (date) den regulären Ausdruck zu?
---
if ($_POST['date'] == "~(200)\d--
---
geht nicht.

  1. Tag Philip.

    Aber wie weise ich dem Datumsfeld (date) den regulären Ausdruck zu?

    Mit Hilfe von preg_match().

    Siechfred

    --
    «Ich liebe euch doch alle!»
  2. gudn tach Philip P.

    ~(200)\d-[-](0[1-9]|[12][0-9]|3[01]~

    da fehlt eine schliessende runde klammer. und die minus-zeichen brauchst du nicht als klasse einzufuehren.
    also /^(200)\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/
    wie du den ausdruck auf einen string anwenden kannst, hat Siechfred bereits gesagt. (preg_match())

    aber genauer ist es, wenn du das datum mit checkdate() ueberpruefst. (denn 2004-02-31 ist kein korrektes datum)
    den string mit dem datum kannst du mit hilfe von substr() in seine bestandteile zerlegen.

    prost
    seth

    1. aber genauer ist es, wenn du das datum mit checkdate() ueberpruefst.

      Sehe ich nicht so.
      Zwar liefert dir checkdate ein true/false zurück, aber keinen Grund (zumal nicht auf Deutsch).
      Ich würde dazu raten, eher den zweiten Tip von dir zu beherzigen und den String erstmal aufsplitten und danach die tage mit den monaten gegenzuhalten (date liefert hierzu ja mit 'j' eine angabe der länge des monat).
      So bekommt der Benutzer am Ende eine Antwort, was falsch war.
      ...obgleich es beim Date, eigentlich recht schnell auch so auffällt... aber es wirkt besser finde ich, da der Benutzer erkennt, dass das System soetwas beachtet und auch erkennt =)

      ciao

      --
      <NetPanther> Na, die Stadt ist Developia, die Hauptstadt von Developien!
      <NetPanther> Developien ist übrigens ein Entwicklungsland!
      <acid`awy> bossi was haste fuern abschluss ?
      <[DEF]Bossland> tdsl
      http://german-bash.org/action/top/n/50
      sh:) fo:| ch:{ rl:( br:& n4:~ ie:| mo:? va:{ de:< zu:| fl:) ss:| ls:< js:|
      1. gudn tach!

        ...obgleich es beim Date, eigentlich recht schnell auch so auffällt...

        eben.
        genaue fehlerangaben sind zwar grundsaetzlich vorzuziehen. aber man kann es auch uebertreiben.
        da es allgemeinbildung ist, wie viele monate ein jahr lang ist, wird der syntaktische fehler fast immer bei der angabe des tages liegen. (vorausgesetzt - aber das halte ich beim datum fuer selbstverstaendlich - dass ein hinweis auf das datumsformat gegeben ist.)

        prost
        seth