2010-12-10 152 views
1

我正在使用calenderExtender控件從用戶獲取日期。文本框可以由用戶手動編輯。我正在使用RegularExpressionValidator來驗證輸入日期。輸入格式我需要的是正則表達式驗證日期 - C#

MMM dd, yyyy

我現在用下面所示的正則表達式驗證日期

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

它工作正常。但它不檢查輸入日期是否小於28,30或31月份。例如:12月份有31天。如果用戶輸入大於31,表達式必須捕獲該表達式。 任何想法,以實現這個使用經常性的exptression?

回答

5

您想要執行的驗證(不包括基於月份的無效日期範圍)實際上不適合正則表達式。您應該解析月份,日期和年份,然後根據解析的值進行驗證。試圖通過正則表達式來做到這一點將是痛苦的,難以維持。

或者,你認爲只是使用DateTime.Parse

+2

DateTime.TryParseExact可能更適合這裏。 – Josh 2010-12-10 05:46:45

1

如果你認爲這很糟糕,那就等到你嘗試支持閏年。是的,正如通常的情況是「我該怎麼做(插入困難的任務)與正則表達式?」問題,最好的方法是完全避免正則表達式。你可以使用RangeValidator嗎?否則,正如JSBangs指出的那樣,您可以使用自定義驗證器和DateTime的解析方法。