XML正则表达式中DD-MM-YYYY日期格式的正则表达式是什么?

时间:2013-05-22 06:16:44

标签: xml regex date xsd

我想知道日期dd-mm-yyyy格式的正则表达式。规则是

·day·值必须不超过30,如果·month·是4,6,9或11之一,不超过28,如果·month·是2且·year·不能被4整除,或者可以被100整除但不能被400整除,如果·月·是2则不超过29且·年·可以被400整除,或者被4整除但不能被100整除。

我想在我的xsd中使用xml正则表达式。

接受 - 29-02-2000, 31-05-2013, 30-04-2012

拒绝 - 29-02-1900, 31-04-2013, 30-02-2000

2 个答案:

答案 0 :(得分: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]))$

虽然这个是最短的(适合推特,这是我的挑战):

^(?!(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])))

我希望这适合你。

答案 1 :(得分:1)

您应该使用以下代码而不是正则表达式验证日期:

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