我是regex的新手。我正在尝试为以下日期模式构建正则表达式,但无法满足所有依赖项。
下面是我需要构建的模式。
21Jun
12Mar
31Aug等。
我的问题是我无法区分30天的月份和31天的月份,特别是我不希望我的正则表达式允许februari月份超过28天。
我做了一些谷歌搜索,发现了类似这样的东西:
^(?:(?: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})$但是我无法从这个表达式中准确地提取出我想要的东西。
发布于 2015-05-27 23:03:52
我建议让模式保持简单:
/(\d+)(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)/然后提取第一个和第二个匹配组(天和月),然后用代码验证与月份相关的日期。
例如:
if( month == "Feb")
if( day > 28 )
throw 'Invalid day for the month of February'
...发布于 2015-05-27 22:52:21
尝试以下模式:
((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):
((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))https://stackoverflow.com/questions/30485793
复制相似问题