簡體   English   中英

javascript正則表達式驗證mm / dd

[英]javascript regular expression validate 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,但匹配的字符串錯過了最后一位數字。

有人可以幫忙嗎? 謝謝,程

使用這個正則表達式: ^(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}$

如果您的字符串只是日期,那么這將是解決方案。 那些錨點^$確保表達式從開始到結束匹配。

在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM