正则表达式验证任何类型的日期格式

时间:2017-06-02 15:55:07

标签: regex

我试图在文本中找到任何类型的日期格式:

  1. 17年4月4日
  2. 2016年4月5日
  3. 1900年12月6日
  4. 2014年12月9日
  5. 1920年5月1日
  6. 2017
  7. 十二月21
  8. 1930年10月10日
  9. 2017年10月10日
  10. 2015年3月10日至12日
  11. 年仅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])
    

    上面的表达式可以找到格式号。如果我尝试使用第一组之后的问号量词来查找日期,例如" Dec。 21"和" 2017"它不再适用于其他日期格式。

    此外,格式号。 1至7或多或少dd/mm/yyyy。但是,格式没有。 8到10是mm/dd/yyyy

    在一个正则表达式中解决这个问题的任何建议? 提前谢谢!

1 个答案:

答案 0 :(得分:3)

建议:代替一个几乎不可能维护的怪物正则表达式,如何使用一组正则表达式,每种格式一个你接受的格式。然后遍历您的数组以查看输入是否与您的任何正则表达式匹配。维护起来会更容易,也可能更快。