0

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

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

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

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

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

4

2 回答 2

6

我实际上有这个正则表达式,我在不久前和我的一个朋友比赛!

以下是我朋友的,大约快 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])))

我希望这对你有用。

于 2013-05-22T06:23:33.953 回答
1

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

DateTime temp;
if(DateTime.TryParse(dateTextBox.Text, out temp))
// valid date
else
// invalid date
于 2013-05-22T06:28:57.573 回答