我其實是有這個表達式躺在身邊,我做了一段時間回來與我的一個朋友競爭!
以下是我朋友的,而約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