2010-12-10 8 views
1

J'utilise un contrôle calenderExtender pour obtenir une date de l'utilisateur. La zone de texte peut être éditée manuellement par l'utilisateur. J'utilise un RegularExpressionValidator pour valider la date d'entrée. Le format d'entrée i besoin estExpression régulière pour valider la date - C#

MMM dd, yyyy

Maintenant, je suis en utilisant une expression régulière ci-dessous pour valider la date

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

Il fonctionne très bien. Mais il ne vérifie pas que la date d'entrée est inférieure à 28,30 ou 31 selon le mois. exemple: le mois de décembre a 31 jours. Si l'utilisateur a entré plus de 31, l'expression doit capturer cela. Toutes les idées pour y parvenir en utilisant l'expulsion régulière?

Répondre

5

La validation que vous souhaitez effectuer (à l'exception des plages de dates non valides en fonction du mois) est vraiment inadaptée à une expression régulière. Vous devez analyser le mois, la date et l'année, puis effectuer votre validation en fonction des valeurs analysées. Essayer de le faire via une regex sera douloureux et difficile à maintenir.

Alternativement, avez-vous envisagé d'utiliser DateTime.Parse?

+2

DateTime.TryParseExact peut être mieux adapté ici. – Josh

1

Si vous pensez que c'est mauvais, attendez d'essayer de supporter les années bissextiles. Oui, comme c'est généralement le cas avec "comment faire (insérer une tâche difficile) avec regex?" questions, la meilleure approche est d'éviter simplement les expressions régulières entièrement. Pouvez-vous utiliser un RangeValidator à la place? Sinon, comme l'a noté JSBangs, vous pouvez utiliser un validateur personnalisé avec les méthodes d'analyse de DateTime.

Questions connexes