2009-12-09 50 views
1

需要在用戶提交的字符串匹配日期 應該與這些不同格式正則表達式匹配日期

jan 1 2000 
january 1 2000 
jan. 1 2000 
1/1/2000 
2000 
january 

你會如何寫這個正則表達式的工作?

+0

是否還有更多允許的格式? – Amarghosh 2009-12-09 08:50:34

+1

最後兩個不是日期。一個是一年,第二個是一個月。對於這些,你將不得不編寫額外的邏輯來確定他們的解決方案。 – RichardOD 2009-12-09 08:55:40

+0

我如何編寫一個正則表達式匹配1000-9999之間的4位數字 – newU 2009-12-09 09:02:18

回答

5

我不會用一個RegExp吧:

DateTime attempt; 
if (DateTime.TryParse(inputDate, out attempt) 
{ 
    // You're good to go. 
} 

但是,這將與「月」的「日期」或「2000」的鬥爭。

+0

我如何編寫一個匹配4位數字的正則表達式,該數字在1000-9999之間 – newU 2009-12-09 09:02:57

+1

MBO在評論中打敗我問題 - 但是如果你接受1000年,爲什麼不是850?還是55BC? – 2009-12-09 09:11:27

1

你先看看DateTime.TryParse嗎?也許它會爲您節省使用正則表達式,除了可能的一些特殊情況。

1

我用太多的東西來驗證正則表達式。

更好地利用DateTime.TryParse

而且這是真的很難驗證與因爲31/30/29/28天/月的特殊情況下,像September 1752和正則表達式的日期。

2

即使這些是唯一允許的格式,也很難用正則表達式來完成,因爲它涉及檢查月份名稱是否有效,檢查日期是否對給定月份(4月31日等)有效,跳過年等。

按照其他人的建議使用DateTime類。

1

這是一個勝利或Web應用程序?如果對於Windows,只需使用DateTime.TryParse,但如果它是用於網頁,則使用JavaScript代替。

對於javascript請參閱this post