2010-05-27 88 views
0

我用來驗證日期的正則表達式:較小的日期正則表達式

^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$ 

的作品真的很好,但我使用它在用asp.net正則表達式驗證程序的地方,我想將它最小化,所以我可以減少頁面大小。它適用於dd/mm/yyyy格式並處理閏年。我正在尋找更簡潔的正則表達式語句。

+4

你的正則表達式使我的眼睛流血! – Aren 2010-05-27 20:21:47

+0

我真的很喜歡「......並處理閏年。」 =) – Jens 2010-05-28 11:31:49

+0

我知道,它確實使眼睛流血。延斯 - 不知道你在做什麼。 – Jeremy 2010-05-28 15:27:50

回答

7

這個怎麼樣:

^(\d{1,2})\/(\d{1,2})\/(\d{4})$ 

然後,一旦你得到的數字出來,使用程序邏輯來驗證日期是否有意義。正如你注意到的那樣,在正則表達式中嘗試這樣做是瘋狂的。

+1

已投票3次。 – 2010-05-27 20:25:18

+0

避免只使用正則表達式的錘子來處理非指甲形狀的問題:) – VonC 2010-05-28 12:04:25

2

您可以創建一個DateValidator類,該類具有Validate方法並使用此正則表達式,其他人都可以引用該類/方法。

如果你不能創建一個新的類來包含這個驗證,你能至少隱藏它在一個全局字符串常量後面嗎?

這樣,如果你改變你的正則表達式,你只能在1個地方而不是1000個地方改變它。

+1

我使用正則表達式驗證器和皮膚在asp.net中實現了它,所以我只在一次定義它,但是當html呈現時,它爲每個驗證器呈現一次正則表達式。 UGG – Jeremy 2010-05-28 15:25:43

1

老兄,解析和驗證是有區別的。我會分開這兩個。正則表達式適用於將日期解析爲日期對象。使用別的方法來確定它是否指向一個存在的時間點,即它是否有效。