Regulärer Ausdruck zur Erkennung von JJJJ-MM-TT

8

Ich benutze asp.net 4 und c #.

Ich muss ein WebControl vom Typ Validation verwenden, nämlich RegularExpressionValidator , um Daten zu erkennen, die in einem TextBox IS NOT in format yyyy-MM-dd (String) eingegeben wurden.

Irgendeine Idee, wie man die RegEx schreibt, um dieses Steuerelement anzuwenden?

Danke

    
GibboK 09.03.2011, 14:29
quelle

7 Antworten

14

Hier ist eine mögliche Regex:

%Vor%

Hinweis: Dies verhindert Monate & gt; 12 und Tage & gt; 31, prüft jedoch nicht bestimmte Monate auf Länge (dh es wird nicht am 30. Februar oder 31. April blockiert). Sie könnten eine Regex schreiben, um das zu tun, aber es wäre ziemlich langwierig, und der 29. Februar wird Ihnen immer Probleme in Regex geben.

Ich würde sagen, wenn Sie diese feinkörnige Validierung benötigen, sollten Sie das Datum besser mit einer Datumsbibliothek analysieren; Regex ist nicht das Werkzeug für Sie. Diese Regex sollte jedoch für eine grundlegende Vorvalidierung ausreichen.

Ich habe auch das Jahr milde gemacht; nur überprüfen, dass es vier Ziffern ist. Aber wenn Sie eine Art von Gesundheitscheck (dh innerhalb bestimmter Grenzen) wollen, sollte es nicht schwer sein, hinzuzufügen. Zum Beispiel, wenn Sie nur Daten in diesem Jahrhundert übereinstimmen möchten, würden Sie die \d{4} am Anfang der Regex durch 20\d{2} ersetzen. Nochmals, der Versuch, ein Datum mit übermäßiger Genauigkeit in Regex zu validieren, wird schwierig sein und Sie sollten einen Date-Parser verwenden, aber Sie können relativ einfach eine grundlegende Anpassung auf Jahrhundertniveau erhalten, um zu verhindern, dass der Benutzer etwas wirklich Dummes eingibt.

Schließlich habe ich ^ und $ gesetzt, um die Enden der Zeichenfolge zu binden, damit sie nicht übereinstimmen kann, wenn der Benutzer ein gültiges Datum und zusätzliche Zeichen eingibt. (Sie können auch einen String-Längen-Validator hinzufügen.)

Ich hoffe, das hilft.

    
Spudley 09.03.2011, 14:43
quelle
7

Spudleys Antwort oben erlaubt 00 für Tag und Monat.

Ich habe es behoben:

%Vor%

Hinweis: keiner dieser Ausdrücke prüft auf Tage in einem Monat, die ungültig sind, z. 04/31, 06/31 oder 02/29 in Nichtschaltjahren.

    
Ralph177 05.03.2013 20:30
quelle
5

Der reguläre Ausdruck \d\d\d\d-\d\d-\d\d sollte den Trick machen.

    
redent84 09.03.2011 14:32
quelle
3

Ich möchte eine kleine Änderung in Spudleys Antwort hinzufügen:

%Vor%

so können Sie Datum wie 2013-5-5 (Monat und Datum ist nicht erforderlich, die Null aber kann verwendet werden)

Ich hoffe, es hilft.

    
Mr Z 18.03.2013 12:28
quelle
0

Eine weitere Implementierung für strukturierte Daten nach ISO 8601:

^ \ d {4} - \ d {1,2} - \ d {1,2} \ s \ d {1,2}: \ d {1,2}: \ d {1,2} .? \ d {0,} $

Es ist nicht ganz so streng und wird falsche Daten akzeptieren, aber es sollte bestätigen, dass es der ISO 8601-Struktur folgt, auch wenn das Datum nicht existiert. Es sollte auch für jemanden mit einem grundlegenden Regex-Verständnis ziemlich einfach zu verstehen sein.

Wenn Sie wirklich sicherstellen möchten, dass das Datum korrekt ist und damit arbeiten, führen Sie DateTime.TryParse () darauf aus.

    
Fase 05.09.2013 16:03
quelle
0
%Vor%

Mach Ergebnis:

1999-09-12

    
Menaka Sankar 25.08.2014 05:47
quelle
-1
%Vor%

Dies ist die Regex für yyyy-MM-dd format.

Sie können - durch \/ für yyyy/MM/dd ...

ersetzen

Getestet, funktioniert perfekt ..

    
Ajit 28.05.2014 03:39
quelle

Tags und Links