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 但匹配的字符串错过了最后一位数字。javascript正则表达式验证mm/dd
任何人都可以帮忙吗? 谢谢, 程
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 但匹配的字符串错过了最后一位数字。javascript正则表达式验证mm/dd
任何人都可以帮忙吗? 谢谢, 程
使用这个表达式:^(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
起初我删除了一些括号。
一种可能解决您的问题是使用锚
^(0?[1-9]|1[0-2]){1}\/(0?[1-9]|1[0-9]|2[0-9]|3[0-1]){1}$
这将是解决办法,如果你的字符串是唯一的日期。那些锚点^
和$
确保表达式从开始到结束匹配。
第二种可能性是改变你的最后部分的顺序。
(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
@mu太短,我们可以排除'06/31'。看到我的答案。 –