2013-05-22 33 views
0

我想知道日期dd-mm-yyyy格式的正則表達式。並且規則是什麼是XML正則表達式中DD-MM-YYYY日期格式的正則表達式?

如果月份是4,6,9或11之一,月日值不得超過30,如果月份是2且年份是月份,則不會超過28不能被4整除,或者可以被100除盡而不能被400整除,並且如果·月·是2並且·年·可被400整除或由4整除但不能被100整除。

我想在xsd中做xml正則表達式。

Accept-- 29-02-2000, 31-05-2013, 30-04-2012

Reject-- 29-02-1900, 31-04-2013, 30-02-2000

+11

爲什麼你會使用正則表達式來解決這個問題? –

+1

爲什麼不試試解析並拒絕,如果它不起作用 –

+0

正則表達式不是解決這個問題的正確工具。 – StuffHappens

回答

5

我其實是有這個表達式躺在身邊,我做了一段時間回來與我的一個朋友競爭!

以下是我朋友的,而約20%的速度:

^(?!00)((([0-2]\d|3[01])-(0[13578]|1[02])|([0-2]\d|30)-(0[469]|11)|([01]\d|2[0-8])-02)-\d{4}|([01]\d|2\d)-02-(([02468][048]|[13579][26])(?=00)|\d{2}(?!00))([02468][048]|[13579][26]))$ 

雖然這一個是(適合在Twitter上,這是我的挑戰)最短:

^(?!(00|30-02))(((?=.+(?!00)([02468](?=[048](00)?$)|[13579](?=[26](00)?$)))|(?!29-02))[012]\d|30|31(?!-(0[2469]|11)))-(0[1-9]|1[012])-\d{4}$ 

注意,這兩個根據公曆日曆,正規表達式將無法驗證yyyy = 0000,這不是一個有效的年份。

這兩個正則表達式都沒有向後看和條件,因爲它必須在javascript中工作。

編輯:

既然你需要這個XML,我已經修改了第一個正則表達式了一下,只需要稍作修改,以擺脫環視的。

((0[1-9]|[1-2]\d|3[01])-(0[13578]|1[02])|([0-2]\d|30)-(0[469]|11)|(0[1-9]|1\d|2[0-8])-02)-\d{4}|(0[1-9]|[12]\d)-02-(([02468][048]|[13579][26])00|(\d{2}([02468][48]|[2468][048]|[13579][26]))) 

我希望這對你有效。

+0

謝謝@melwil。但我需要在XML正則表達式中完成。 – Sai

+0

W3C XML風格太有限,無法對所有日期進行精確驗證。幾乎不可能找到迂迴年齡的人,因爲幾乎不可能,至少我不想考慮這個長度。驗證應該由創建這個XML的程序來完成,因爲XML並不是用來驗證數據,而只是代表它。 – melwil

+0

我決定嘗試。結果比我想象的要容易。我會更新答案。 – melwil

1

您應該驗證日期用下面的代碼,而不是一個正則表達式:

DateTime temp; 
if(DateTime.TryParse(dateTextBox.Text, out temp)) 
// valid date 
else 
// invalid date