正则表达式:使用多个分隔符验证欧洲日期格式

时间:2012-09-18 08:18:41

标签: regex

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

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

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

当我用“。”替换“(。| - )”时。仅用于验证用点分隔的日期。所以我想问题必须是“(。| - )” 有什么想法吗?

3 个答案:

答案 0 :(得分:9)

请注意,到目前为止使用\ 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}$

答案 1 :(得分:3)

经过微小修改后,它可以正常工作:

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

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

  3. http://regexr.com?326f2

答案 2 :(得分: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}/

但不要同时使用