2010-12-10 16 views
1

Ich verwende ein CalenderExtender-Steuerelement, um ein Datum vom Benutzer abzurufen. Das Textfeld kann manuell vom Benutzer bearbeitet werden. Ich verwende einen RegularExpressionValidator, um das Eingabedatum zu validieren. Das Eingabeformat ich brauche, istRegulärer Ausdruck zum Validieren des Datums - C#

MMM dd, yyyy

Nun ich einen regulären Ausdruck verwende unten Datum Erstkäufer

((Jan)|(Feb)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|(Nov)|(Dec)){1}\s?\d{1,2},\s?\d{4} 

Es funktioniert gut. Aber es überprüft nicht das Eingabedatum ist weniger als 28,30 oder 31 basierend auf Monat. Beispiel: Der Monat Dezember hat 31 Tage. Wenn der Benutzer größer als 31 eingegeben hat, muss der Ausdruck dies erfassen. Irgendwelche Ideen, um dies zu erreichen mit regelmäßigen Expression ??

Antwort

5

Die Validierung, die Sie durchführen möchten (mit Ausnahme ungültiger Datumsbereiche basierend auf dem Monat), ist für einen regulären Ausdruck wirklich ungeeignet. Sie sollten den Monat, das Datum und das Jahr analysieren und dann Ihre Validierung basierend auf den analysierten Werten durchführen. Der Versuch, es über einen Regex zu tun, wird schmerzhaft und schwierig zu pflegen sein.

Haben Sie alternativ nur DateTime.Parse verwendet?

+2

DateTime.TryParseExact kann hier besser geeignet sein. – Josh

1

Wenn Sie denken, dass das schlecht ist, warten Sie einfach, bis Sie versuchen, Schaltjahre zu unterstützen. Ja, wie es normalerweise bei "Wie mache ich (schwierige Aufgabe einfügen) mit Regex"? Fragen ist der beste Ansatz, nur reguläre Ausdrücke zu vermeiden. Kannst du stattdessen einen RangeValidator verwenden? Andernfalls könnten Sie, wie JSBangs bemerkt, einen benutzerdefinierten Validator mit den Parsing-Methoden von DateTime verwenden.