2017-06-02 90 views
-1

我試圖找到任何類型的日期格式的文本爲:正則表達式來驗證任何類型的日期格式的

  1. 17年4月4日
  2. 2016年4月5日
  3. 6 1900年12月
  4. 2014年12月9日
  5. 1920年5月
  6. 2017年
  7. 12月21日
  8. 日3210
  9. 1930年10月10日
  10. 二零一七年十月十日
  11. 3月10-12日2015年

年只有1800至2017年

這是我到目前爲止有:

(0?[1-9]|[12][0-9]|3[01])?([\/\-\.]|st of\s|nd of\s|rd of\s|th of\s|\s)(Jan.?(uary)?|Feb.?(ruary)?|Mar.?(ch)?|Apr.?(il)?|May|Jun.?(e)?|Jul.?(y)?|Aug.?(ust)?|Sep.?(tember)?|Oct.?(ober)?|Nov.?(ember)?|Dec.?(ember)?|0?[1-9]|1[012])([\/\-\.]|\s)(((18|19)\d{2}|20[01][0-7])|[01][0-7]) 

上面的表達式可以找到格式no。 1〜5。如果我嘗試與第一組之後的問號量詞努力找到像日期「12月21日」和「2017年」不爲其他日期格式工作了。

此外,沒有格式。 1至7或多或少是dd/mm/yyyy。但是,格式編號8至10是mm/dd/yyyy

任何意見,解決一個正則表達式這個問題? 提前謝謝!

+0

「有什麼建議來解決這個問題,一個正則表達式?」別。使用戴夫C的建議。並且請注意,您只列出了「任何類型的日期格式」的一小部分。您可能需要添加更多。 – 2017-06-02 16:19:36

回答

3

建議:不是一個怪物正則表達式,這將是幾乎不可能維持,怎麼樣有正則表達式的數組,一個給你要接受每一種格式。然後遍歷數組,查看輸入是否與任何正則表達式匹配。維護起來會更容易,而且運行速度也會更快。

+0

出於性能(如果該事項),它可以是一個很好的做法,使該數組,循環數組,使一個較長的正則表達式,編譯正則表達式,然後通過編譯正則表達式,你想用它。如果這只是一些正則表達式,這並不重要,但是如果你得到幾十個正則表達式來動態創建一個大規模正則表達式,並且編譯速度會更快。 – sniperd