2017-06-02 42 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