我实际上有这个正则表达式,我在不久前和我的一个朋友比赛!
以下是我朋友的,大约快 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])))
我希望这对你有用。