Verwenden von filter_var () zum Überprüfen des Datums?

8

Ich verwende offensichtlich filter_var () nicht korrekt. Ich muss überprüfen, ob der Benutzer ein gültiges Datum in der Form "TT / MM / JJJJ" eingegeben hat.

Dies gibt einfach zurück, was ich als Datum weitergegeben habe, während ich erwartete, dass es entweder das Datum oder 0 / null / FALSE zurückgibt, falls die Eingabezeichenfolge nicht wie ein Datum aussieht:

%Vor%

Wenn jemand anderes diese Funktion verwendet, um Daten zu überprüfen, was mache ich falsch? Soll ich eine andere Funktion verwenden, um Formularfelder zu validieren?

Danke.

    
Gulbahar 06.12.2012, 14:59
quelle

6 Antworten

14
%Vor%

Die Regex stimmt überein, weil Sie nur das Muster irgendwo in der Zeichenfolge benötigen. Was Sie wollen, ist nur das Muster und nichts anderes. Fügen Sie also ^ und $ hinzu.

Beachten Sie, dass dies nicht bedeutet, dass der Wert ein gültiges Datum ist. 99/99/9999 wird diesen Test bestehen. Ich würde verwenden:

%Vor%     
deceze 06.12.2012, 15:02
quelle
19

Die Verwendung von Regex zur Validierung des Datums ist eine schlechte Idee. Stellen Sie sich vor, dass 99/99/9999 leicht als gültiges Datum angesehen werden kann. Sie sollten checkdate

%Vor%

Einfache Verwendung

%Vor%     
Baba 06.12.2012 15:05
quelle
2

Eine einfache und bequeme Möglichkeit, das Datum in PHP zu überprüfen, ist eine Funktion strtotime . Sie können das Datum mit nur einer Zeile validieren:

%Vor%     
Cmyker 23.09.2014 13:35
quelle
1

Warum sollten Sie ein schweres RegEx verwenden, obwohl es eine native DateTime PHP-Klasse gibt?

%Vor%

Gibt immer das Format zurück, das Sie erwartet haben, wenn eine gültige Datetime-Zeichenfolge eingefügt wurde.

    
Tim 19.01.2017 17:18
quelle
0

Versuchen Sie, den Anfang und das Ende Ihrer Regex so einzustellen:

%Vor%     
Benjamin Paap 06.12.2012 15:04
quelle
0

Sie haben viele Antworten erhalten, die darauf hinwiesen, dass die RegEx eine Antwort auf 99/99/9999 erlauben würde. Das kann gelöst werden, indem ein wenig mehr zur RegEx hinzugefügt wird. Wenn Sie wissen, dass Sie nie ein Datum außerhalb der Jahre 1900-2099 haben werden ... können Sie eine RegEx wie folgt verwenden:

%Vor%

Damit wird ein Datum dieses Formats bestätigt: TT / MM / JJJJ

Zwischen: 01/01/1900 - 31/12/2099

Wenn Sie mehr Jahre brauchen, fügen Sie sie einfach am Ende hinzu. | 21 | 22 | 23 | 24 | 25 (würde es bis zum Jahr 2599 verlängern.)

    
AJ Quick 12.07.2015 20:24
quelle

Tags und Links