6

我想验证欧洲日期格式,如“10.02.2012”或“10-02-2012”。因此我创建了以下正则表达式:

/\d[0-9]{2}(.|-)\d[0-9]{2}(.|-)\d[0-9]{4}/

不幸的是,即使日期格式正确,我总是收到无效的消息。

当我用“。”替换“(。|-)”时 对于仅验证用点分隔的日期,它可以工作。所以我想问题一定是“(。|-)”有什么想法吗?

4

3 回答 3

10

请注意,到目前为止使用 \d 字符类提供的答案将允许诸如 00.00.0000 或 99.99.9999 之类的日期通过。如果你想抓住这个,你需要使用更具体的正则表达式。下面的一个将允许 01.01.1900 和 31.12.2099 之间的有效日期

^([1-9]|0[1-9]|[12][0-9]|3[01])[-\.]([1-9]|0[1-9]|1[012])[-\.](19|20)\d\d$

如果您想允许从 0000 到 9999 的任何年份,那么您可以将其更改为

^([1-9]|0[1-9]|[12][0-9]|3[01])[-\.]([1-9]|0[1-9]|1[012])[-\.]\d{4}$
于 2013-01-28T16:33:27.830 回答
4

稍作修改后它可以正常工作:

\d{2}(\.|-)\d{2}(\.|-)\d{4}
  1. 这 ”。” 需要逃脱。

  2. \d 与 [0-9] 相同,无需重复。

http://regexr.com?326f2

于 2012-09-18T08:24:28.640 回答
1

好的,我看到你的问题...

/\d[0-9]{2}(.|-)\d[0-9]{2}(.|-)\d[0-9]{4}/

是多余的,因为 \d 与 [0-9] 相同,所以实际上在这里你匹配的是 3 位而不是 2。试试

/\d{2}(\.|-)\d{2}(\.|-)\d{4}/

或者

/[0-9]{2}(\.|-)[0-9]{2}(\.|-)[0-9]{4}/

但不要同时使用

于 2012-09-18T08:24:19.393 回答