1

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

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

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

4

3 回答 3

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 日呢?

于 2013-09-27T14:01:28.783 回答
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

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

于 2013-09-27T13:58:20.550 回答
1

试试\d{2,4}[-/]\d{1,2}[-/]\d{1,4} http://regexr.com?36goq - 看看实际情况

于 2013-09-27T14:18:44.083 回答