首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法构建用于验证日期的正则表达式

无法构建用于验证日期的正则表达式
EN

Stack Overflow用户
提问于 2015-05-27 22:42:02
回答 2查看 28关注 0票数 0

我是regex的新手。我正在尝试为以下日期模式构建正则表达式,但无法满足所有依赖项。

下面是我需要构建的模式。

代码语言:javascript
运行
复制
21Jun
12Mar
31Aug

等。

我的问题是我无法区分30天的月份和31天的月份,特别是我不希望我的正则表达式允许februari月份超过28天。

我做了一些谷歌搜索,发现了类似这样的东西:

代码语言:javascript
运行
复制
^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]|(?:Jan|Mar|May|Jul|Aug|Oct|Dec)))
\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2]|
(?:Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\2))(?:(?:1[6-9]|[2-9]\d)?
\d{2})$|^(?:29(\/|-|\.)(?:0?2|(?:Feb))\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|
[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?
[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9]|
(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep))|(?:1[0-2]|(?:Oct|Nov|Dec)))\4(?:
(?:1[6-9]|[2-9]\d)?\d{2})$

但是我无法从这个表达式中准确地提取出我想要的东西。

EN

回答 2

Stack Overflow用户

发布于 2015-05-27 23:03:52

我建议让模式保持简单:

代码语言:javascript
运行
复制
/(\d+)(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)/

然后提取第一个和第二个匹配组(天和月),然后用代码验证与月份相关的日期。

例如:

代码语言:javascript
运行
复制
if( month == "Feb")
   if( day > 28 )
      throw 'Invalid day for the month of February'
...
票数 2
EN

Stack Overflow用户

发布于 2015-05-27 22:52:21

尝试以下模式:

代码语言:javascript
运行
复制
((0[1-9]|[1-2][0-9])(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))|
((30)(Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))|
((31)(Jan|Mar|May|Jul|Aug|Oct|Dec))

编辑:这将允许二月最多28天(而不允许29Feb):

代码语言:javascript
运行
复制
((0[1-9]|1[0-9]|2[0-8])(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))|
((30|29)(Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))|
((31)(Jan|Mar|May|Jul|Aug|Oct|Dec))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30485793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档