Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript正则表达式验证mm/dd_Javascript_Regex - Fatal编程技术网

javascript正则表达式验证mm/dd

javascript正则表达式验证mm/dd,javascript,regex,Javascript,Regex,我试图验证日期格式mm/dd 但是匹配的字符串缺少最后一个数字 有人能帮忙吗? 谢谢 Cheng使用此正则表达式:^(0?[1-9]| 1[0-2])/(0?[1-9]|[12][0-9]| 3[01])$ 如果需要字符串中的匹配项,请使用单词边界,例如: 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 但是匹配的字符串缺少最后一个数字

有人能帮忙吗? 谢谢 Cheng

使用此正则表达式:
^(0?[1-9]| 1[0-2])/(0?[1-9]|[12][0-9]| 3[01])$

如果需要字符串中的匹配项,请使用单词边界,例如:

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"]


大型正则表达式:

(?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(?)
(?
0?[13578]
|
1[02]
)
/
(?
0?[1-9]
|
[12][0-9]
|
3[01]
)
|
(?
0?[469]
|
11
)
/
(?
0?[1-9]
|
[12][0-9]
|
30
)
|
(?
0?2
)
/
(?
0?[1-9]
|
[12][0-9]
)
)
\b

首先,我删除了一些括号

解决问题的一种可能性是使用锚

(?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]
与您的
15
匹配,您的表达式成功了,就是这样。如果我们把它放在末尾,那么首先它尝试匹配由两个数字组成的数字,然后它匹配
15

@cheng,忘记了字符串的开头和结尾,即
^
$
。等等,它在下面的字符串r=/^(0?[1-9].[1-2])\/(0?[1-9].[12][0-9].[3[01])g ss=“2/10 asdfasdfadsf 2/15 dfsgdfgdf 2/17 dfghdfghdfgh”ss.match(r)>nullit与“12/15”一起工作,但与“2/10 asdfasdfadsf 2/15 dfsgasdfgdf 2/15 dfsgsgdfgdf 2/17 dfghdfghdfgfgdf 2/17”不一起工作。同样,顺序也没关系,只要我有$@cheng,就使用第二个正则表达式(
\b(0?[1-9]|[0-9]|[12][-9]|/b])。在字符串
2/10 asdfasdfadsf 2/15 dfsgsdfgdf 2/17 dfghdfghdfgh
中,它将匹配:
2/10
2/15
2/17
,我测试了。它很有效。非常感谢!但是你知道为什么旧的(带^$)不起作用吗?@mu太短了,
06/31
我们可以排除。请看我的答案。
 ^(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}