s="12/15"
r=/((0?[1-9])|(1[0-2])){1}\/((0?[1-9])|(1[0-9])|(2[0-9])|(3[0-1])){1}/g
s.match(r)
> ["12/1"]我试图验证日期格式mm/dd,但匹配的字符串缺少最后一个数字。
有人能帮上忙吗?谢谢,程
发布于 2011-07-24 02:26:24
使用这个正则表达式:^(0?[1-9]|1[0-2])/(0?[1-9]|[12][0-9]|3[01])$
如果想要字符串中的匹配项,请使用单词边界,例如:
\b(0?[1-9]|1[0-2])/(0?[1-9]|[12][0-9]|3[01])\b(?x)
^
(
0?[1-9] # 1-9 or 01-09
|
1[0-2] # 10 11 12
)
/
(
0?[1-9] # 1-9 or 01-09
|
[12][0-9] # 10-29
|
3[01] # 30 31
)
$大型正则表达式:
(?x)
\b(?:
(?<month>
0?[13578]
|
1[02]
)
/
(?<day>
0?[1-9]
|
[12][0-9]
|
3[01]
)
|
(?<month>
0?[469]
|
11
)
/
(?<day>
0?[1-9]
|
[12][0-9]
|
30
)
|
(?<month>
0?2
)
/
(?<day>
0?[1-9]
|
[12][0-9]
)
)
\b发布于 2011-07-24 02:34:50
一开始我取下了你的一些支架。
解决问题的一种方法是使用锚点。
^(0?[1-9]|1[0-2]){1}\/(0?[1-9]|1[0-9]|2[0-9]|3[0-1]){1}$如果您的字符串只是日期,这将是解决方案。这些锚点^和$确保表达式从头到尾都匹配。
查看here online on Regexr
第二种可能是改变最后一部分的顺序。
(0?[1-9]|1[0-2]){1}\/(1[0-9]|2[0-9]|3[0-1]|0?[1-9]){1}因为第一部分0?[1-9]与您的15匹配,所以表达式成功了,仅此而已。如果我们把它放到最后,首先它尝试匹配由两位数组成的数字,然后它匹配15
https://stackoverflow.com/questions/6802379
复制相似问题