我需要一个正则表达式来处理多种日期格式

时间:2013-09-27 13:46:55

标签: regex date-format date-formatting

我需要一个可以处理这些日期格式的正则表达式:

  • 2010-1-1
  • 2010年6月1日
  • 2010年6月1日
  • 2010年10月10日
  • 10/10/2010
  • 2010/10/10

这是可能的还是我最好为每种格式创建多个正则表达式?

3 个答案:

答案 0 :(得分:4)

您可以使用管道(\ |)来组合正则表达式,因此只要您可以为每个表达式编写正则表达式,就可以将它们全部粘贴在一起,例如:这应该与前两个日期匹配:“\([12] [0-9] [0-9] [0-9] - [1-9] - [1-9] \ | [12] [0- 9] [0-9] [0-9] - [0-9] -0 [1-9] \)“(您没有明确指定格式,因此可能需要针对您的实际问题进行推广。 )

但是,您可能需要考虑一些更大的问题。

10-11-2010究竟是什么意思?是10月11日还是11月10日?

您是否只假设有效日期?你打算怎么办2010-1-32?那么2010-2-29呢?

答案 1 :(得分:2)

尝试\d{2,4}[-/]\d{1,2}[-/]\d{1,4} http://regexr.com?36goq - 参见行动

答案 2 :(得分:1)

您最好使用|的不同格式验证器,例如:

/\b[\d]{4}-[\d]-[\d]\b
|
\b[\d]{4}-[\d]{1,2}-[\d]{1,2}\b
|
\b[\d]{2}-[\d]{2}-[\d]{4}\b
|
\b[\d]{2}\/[\d]{2}\/[\d]{4}\b
|
\b[\d]{4}\/[\d]{2}\/[\d]{2}\b/x

但是请注意,验证日期和发现它的发生不是同一个问题。您的所有日期都是standard strtotime的有效日期 - 因此您可以使用该事实来验证(而不是搜索)您的日期。