我其实是有这个表达式躺在身边,我做了一段时间回来与我的一个朋友竞争!
以下是我朋友的,而约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])))
我希望这对你有效。
为什么你会使用正则表达式来解决这个问题? –
为什么不试试解析并拒绝,如果它不起作用 –
正则表达式不是解决这个问题的正确工具。 – StuffHappens