1

我根据W3 规范检查日期是否有效:

/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/

接受以下格式:

   Year:
      YYYY (eg 1997)
   Year and month:
      YYYY-MM (eg 1997-07)
   Complete date:
      YYYY-MM-DD (eg 1997-07-16)
   Complete date plus hours and minutes:
      YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
   Complete date plus hours, minutes and seconds:
      YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
   Complete date plus hours, minutes, seconds and a decimal fraction of a
second
      YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)

2005-04-05从不匹配,我无法为我的生活弄明白。根据模式,它应该匹配。

4

1 回答 1

2

考虑使用 OR 类型的方法来构建它,然后如果你愿意,可以通过查看来简化:

(\d{4})|(\d{4}-\d{2})|(\d{4}-\d{2}-\d{2})|(\d{4}-\d{2}-\d{2}T\d{2}(:\d{2}){1,2}[-+]\d{2}:\d{2})

此外,这不是检查日期的有效数字,如果您将其模块化,可以很容易地完成它,逐步进行。日期的示例可能如下所示:

\d{4}-(([0]{0,1}[\d])|(1[0-2]))-(([0-2]{0,1}[\d])|(3[01]))

请注意,这假设只有 4 位数的年份,并且任何 4 位数的年份都可以。它还允许将 01 和 1 作为单个数字的月份和日期数字。为了清楚起见,还有一些额外的括号。

于 2013-02-21T15:53:36.497 回答