2012-07-17 222 views
2

我是新來的正則表達式,我想知道如果有人可以幫助。我甚至不確定Regex是否是我嘗試做的最好的選擇。各種日期格式的正則表達式

我有一個字符串數組,我正在翻閱。我想找到匹配各種日期格式的數組中的所有項目。以下是我試圖匹配的示例格式。

2012年4月1日 - 短月份名稱與沒有在第一天領先的零 - 比賽

2012年4月1日 - 與天領先的零短月份名稱 - 比賽

2012年4月1日 - 全文有沒有在第一天領先的零一個月名稱 - 比賽

2012年4月01 - 全文月份名稱與天領先的零 - 比賽

2012/4/1 - 上月和日無前導零 - 匹配

04/01/2012 - 上月和日前導零 - 匹配

2012年2月29日 - 如果今年是一個飛躍,讓2/29 - 匹配

13/12/2001 - 月外面1-12 - 不匹配

二零一二年二月三十零日 - 太多天在一個月 - 不匹配

2011年2月29日 - 如果不是閏年 - 不匹配

當前正則表達式我已經開發出來了。

\b(?:(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May?|Jun(?:e)?|Jul(?:y) |Aug(?:ust)?|Sep(?:t(?:ember)?)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?))|(0?[1-9]|1[012])[- /.,](0?[1-9]|1[0-9]|2[0-9]|3[01]) 

我可以開發正則表達式來detech每種格式的各個部分,但連接在一起的,這樣我就只能得到一個匹配。目前它匹配兩次(月,月+日)。我只希望它匹配整場比賽的時候。

感謝

jlimited

+2

試試['DateJS'(http://www.datejs.com/) – diEcho 2012-07-17 04:56:57

+1

使用''RegEx''你會比一些日期字符串,但你永遠無法創建一個''純正規模式''來驗證日期字段。你可能會贏得一場戰爭而不是戰爭!假設「閏年問題」。 – Cylian 2012-07-17 05:05:41

回答

1

你爲什麼想要做這一切在一個簡單的正則表達式?這聽起來應該更復雜。此外,想想未來增加新格式,例如?這不是直截了當的。我寧願將相似的模式組合成單個正則表達式,例如「2012年4月1日」,「2012年4月1日」,然後是「04/01/2012」,「02/30/2012」。無論如何,我想在某些時候,你需要將日期的不同組件處理成一個通用的表示。爲此,您可能需要專用代碼。

這可能不是您想要的答案,但作爲一般原則,請始終嘗試將大問題分解爲可輕鬆解決的較小問題。

乾杯,

何塞