我想知道日期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
答案 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