Regex zur Validierung des Datums in PHP mit dem Format YYYY-MM-DD

7

Ich versuche, einen Termin-Regex-Validator zu erstellen. Das Problem, das ich habe, ist, dass ich ein Eingabefeld mit "date" type verwende, das in Chrome wie ein Charm funktioniert. Es öffnet sich ein Kalender-ähnliches in Chrome, aber im übrigen tut es nichts, also entschied ich mich für eine manuelle Eingabe des Datums für den Rest zu gehen.

Das ist mein Fehler, der die Nachricht wirft (ich suche nach dem Format JJJJ-MM-TT):

%Vor%

Ich weiß, dass es viele Beispiele dafür gibt, aber ich habe schon 20 probiert und konnte es nicht lösen. Vielleicht vermisse ich etwas.

Hier ist das Eingabefeld, wenn etwas relevant:

%Vor%     
Cataneo 04.11.2013, 17:25
quelle

3 Antworten

10

Ihre Regex funktionierte nicht, weil Sie unescaped / delimiter.

hatten

Die Regex, die das Datum im Format YYYY-MM-DD wie folgt validiert:

%Vor%

Es wird validiert, dass das Jahr mit 19 oder 20 beginnt, dass der Monat nicht größer als 12 und nicht gleich 0 ist und dass der Tag nicht größer ist als 31 und doesn 't gleich 0 .

Beispiel Online

Mit Ihrem ersten Beispiel könnten Sie es so testen:

%Vor%

Beispiel online

    
Ilia Rostovtsev 04.11.2013, 18:04
quelle
13

Verwenden Sie Regex nicht dafür, Sie können das gleiche Ergebnis erhalten, indem Sie DateTime::createFromFormat

verwenden %Vor%

Sie können hier mehr lesen:

Ссылка

Es scheint jedoch, dass das Problem völlig unabhängig von PHP ist.

PHP läuft am Backend und es sieht so aus, als hätten Sie ein Front-End-Problem.

Ich bezweifle auch, dass das Problem der verwendete Eingabetyp ist. Wenn ein Browser den angegebenen Eingabetyp nicht unterstützt, wird standardmäßig der Text verwendet. Sehen Sie es hier:

Ссылка

Mein Browser weiß nicht, was <input type="whatever" /> ist, daher setzt er den Eingabetyp auf "text". Wenn ich diese 4 Eingaben in ein <form action="myForm.php" method="POST"></form> -Tag umgebe, sendet der Browser die Eingaben an den Server, weil es dem Server egal ist, ob die Eingaben ausgeblendet waren, Optionsfelder, Auswahlen, Texte oder Passwort. Der Server empfängt nur Rohdaten.

Mehr als wahrscheinlich ist Ihr Problem mit Ihrem Javascript und nicht mit Ihrem PHP. Versuchen Sie herauszufinden, ob der Browser, der Ihr Widget nicht anzeigt, Ihnen mitteilt, dass auf Ihrer Seite ein Fehler aufgetreten ist.

Safari und Firefox haben Entwicklungs- / Debugging-Tools, nicht so sicher über IE.

    
ILikeTacos 04.11.2013 17:45
quelle
0

Überprüfen und validieren Sie YYYY-MM-DD date in einer einzeiligen Anweisung

%Vor%

Siehe die Details in meiner Antwort hier .

Verwenden Sie nicht Blind DateTime::createFromFormat , um Daten zu validieren. Nehmen wir das nicht vorhandene Datum 2018-02-30 und sehen Sie:

%Vor%

Ja, es gibt true , nicht false zurück, wie Sie vielleicht erwarten. Interessanter:

%Vor%

Auch true ... Also, validiert nur die Anzahl der Ziffern. Noch ein Versuch:

%Vor%

Endlich false .

Was hier vor sich geht, können wir anhand dieses Ausschnitts sehen:

%Vor%

Wie Sie sehen können, wenn wir das nicht vorhandene 2018-02-30 übergeben, enthält das DateTime -Objekt 2018-03-02 . Ich nehme an, dass der Februar 2018 28 Tage hat, dh das maximale Datum ist 2018-02-28 , und wenn wir den Tag 30 übergeben, addiert createFromFormat nur 30 Tage zum 2018-02-01 und erstellt ein neues Datum ohne vorherige Gültigkeitsprüfung.

    
Vladislav Savchuk 19.11.2017 16:55
quelle

Tags und Links