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

Regex 正则表达式:使用多个分隔符验证欧洲日期格式,regex,Regex,我想验证欧洲日期格式,如“10.02.2012”或“10-02-2012”。因此,我创建了以下正则表达式: /\d[0-9]{2}(.|-)\d[0-9]{2}(.|-)\d[0-9]{4}/ 不幸的是,我总是收到无效的消息,即使日期格式正确 当我将“(.|-)”替换为“.”时,仅验证用点分隔的日期,它就起作用了。所以我猜问题一定是“(.|-)” 有什么想法吗?好的,我明白你的问题了 /\d[0-9]{2}(.|-)\d[0-9]{2}(.|-)\d[0-9]{4}/ 是冗余的,因为\d与[

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

/\d[0-9]{2}(.|-)\d[0-9]{2}(.|-)\d[0-9]{4}/
不幸的是,我总是收到无效的消息,即使日期格式正确

当我将“(.|-)”替换为“.”时,仅验证用点分隔的日期,它就起作用了。所以我猜问题一定是“(.|-)”
有什么想法吗?

好的,我明白你的问题了

/\d[0-9]{2}(.|-)\d[0-9]{2}(.|-)\d[0-9]{4}/
是冗余的,因为\d与[0-9]相同,所以实际上这里匹配的是3位数字,而不是2位数字。试一试

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


但不要同时使用这两种方法,只需稍加修改即可正常工作:

\d{2}(\.|-)\d{2}(\.|-)\d{4}
  • “.”需要转义

  • \d与[0-9]相同,无需重复


  • 请注意,目前使用\d字符类提供的答案将允许通过日期,如00.00.0000或99.99.9999。如果你想抓住这一点,你需要使用一个更具体的正则表达式。下表将允许1900年1月1日至2099年12月31日之间的有效日期

    ^([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}$
    

    点需要转义,如\。字面意思。字符,尽管它仍然应该正确匹配,但它将无法过滤除。或者-只是在ruby控制台中尝试了这一做法,但是它没有起到同样的效果:<代码>1.9.3-3-0.3-0 0 0:0 0 0-或者-只是在ruby控制台中尝试了这一做法,但是这只是在红宝石控制台中尝试了这一做法,但是它没有起到同样的效果,但是它也没有起到同样的工作::<代码>代码>1.9.9.9.9.3.3.3.3.3.3-3-3-0 0 0 0 0 0 0 0.3-或者-或者-或者-或者-或者-或者-只是-只是-只是-只是只是在Rub-只是在Rub-只是在红宝石试试试试了这只是在红宝石的尝试了在红宝石控制台中试试了这一在红宝石控制台中,只是在红宝石控制台中试了这个,但只是在红宝石控制台中试了,但是,但只是在红宝石控制台中试了这个,但是,但是只是在红宝石控制台中试了这p0:059?>其他1.9.3-p0:060>放“假”1.9.3-p0:061?>end false=>nil最好使用字符类,这就是它们的用途:
    \d{2}[.-]\d{2}[.-]\d{4}
    。额外的好处:不需要逃避点。非常感谢,但是即使正则表达式现在是正确的,不幸的是它仍然不能在ruby上下文中工作。但我想这是一个与ruby相关的问题
    ^([1-9]|0[1-9]|[12][0-9]|3[01])[-\.]([1-9]|0[1-9]|1[012])[-\.]\d{4}$