我的正則表達式有問題。這裏是。正則表達式日期匹配不起作用
/0[1-9]|1[0-2]|^[1-9]{1}$\/^[1-9]{1}$|0[1-9]|[1-2]\d|3[0-1]\/19\d{2}|20\d{2}/
它不應該與這個日期,
1/32/2006
但由於某種原因它是匹配,你能告訴我什麼,我做錯了什麼?
我的正則表達式有問題。這裏是。正則表達式日期匹配不起作用
/0[1-9]|1[0-2]|^[1-9]{1}$\/^[1-9]{1}$|0[1-9]|[1-2]\d|3[0-1]\/19\d{2}|20\d{2}/
它不應該與這個日期,
1/32/2006
但由於某種原因它是匹配,你能告訴我什麼,我做錯了什麼?
你似乎有幾個問題。
正則表達式在第一個替代匹配 「06」(2006年)已上市的 「0 [1-9]」
你可能是指
/^(0[1-9]|1[0-2]|^[1-9]{1})\/([1-9]{1}|0[1-9]|[1-2]\d|3[0-1])\/(19\d{2}|20\d{2})$/
或類似的東西(我還沒有測試過這個正則表達式,它可能還有其他問題),但是你應該看看Regular Expression to match a valid day in a date,以便看到更好的正則表達式和智慧的詞語,在正則表達式中這樣做。
您需要對這些部分進行分組,並擺脫^
和$
。
/(0[1-9]|1[0-2]|[1-9]{1})\/([1-9]{1}|0[1-9]|[1-2]\d|3[0-1])\/((19|20)\d{2})/
看起來塞思更新他的答案比我寫(和測試)我的更快。 :-) – 2011-05-20 22:37:26
正則表達式匹配日期here有很好的概述。特別是,它列出了正則表達式匹配MM/DD/YYYY日期:
^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$
即使所有的間距和更好的分隔符,
m{
^
(?: 0[1-9] | 1[0-2]? | [2-9])
/
(?: 0[1-9] | 1[0-9]? | 2[0-9]? | 3[0-1]? | [4-9])
/
(?: (?:19|20)[0-9]{2})
\z
}x
是幾乎沒有可讀性
m{^([0-9]{1,2})/([0-9]{1,2})/([0-9]{4}) \z }x
&& $1 >= 1 && $1 <= 12
&& $2 >= 1 && $2 <= 31
&& $3 >= 1900 && $3 <= 2099
我已經申請了一些修正:
\d
不等於[0-9]
。$
允許換行。這很有趣:
^[1-9]{1}$
看起來你正在使用的匹配,這不是之前或之後另一個數字一個數字。這是行不通的。 ^
和$
將匹配定位到字符串的開頭和結尾,{1}
什麼都不做。
如果要允許與可選的前導零的單數字,使用此:
0?[1-9]
的完整的regex將被:
(?:1[02]|0?[1-9])\/(?:3[01]|[12]\d|0?[1-9])\/(?:19\d{2}|20\d{2})
我還添加正如@Seth所建議的,用於分組的括號。
對於正則表達式,通常更好地告訴我們你想要匹配的條件 – Duniyadnd 2011-05-20 22:35:01