3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個贊
您最好對/進(jìn)行拆分,然后測試所有單個部分。但是,如果您真的想使用正則表達(dá)式,可以嘗試以下一種:
#\A(?:(?:(?:(?:0?[13578])|(1[02]))/31/(19|20)?\d\d)|(?:(?:(?:0?[13-9])|(?:1[0-2]))/(?:29|30)/(?:19|20)?\d\d)|(?:0?2/29/(?:19|20)(?:(?:[02468][048])|(?:[13579][26])))|(?:(?:(?:0?[1-9])|(?:1[0-2]))/(?:(?:0?[1-9])|(?:1\d)|(?:2[0-8]))/(?:19|20)?\d\d))\Z#
說明:
\A # start of string
(?: # group without capture
# that match 31st of month 1,3,5,7,8,10,12
(?: # group without capture
(?: # group without capture
(?: # group without capture
0? # number 0 optionnal
[13578] # one digit either 1,3,5,7 or 8
) # end group
| # alternative
(1[02]) # 1 followed by 0 or 2
) # end group
/ # slash
31 # number 31
/ # slash
(19|20)? #numbers 19 or 20 optionnal
\d\d # 2 digits from 00 to 99
) # end group
|
(?:(?:(?:0?[13-9])|(?:1[0-2]))/(?:29|30)/(?:19|20)?\d\d)
|
(?:0?2/29/(?:19|20)(?:(?:[02468][048])|(?:[13579][26])))
|
(?:(?:(?:0?[1-9])|(?:1[0-2]))/(?:(?:0?[1-9])|(?:1\d)|(?:2[0-8]))/(?:19|20)?\d\d)
)
\Z
我已經(jīng)解釋了第一部分,其余部分留作練習(xí)。
此匹配一個無效日期:02/29/1900,但對于01/01/1900到12/31/2099之間的任何其他日期都是正確的

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個贊
您可以使用regexp做的最好的事情就是驗(yàn)證格式,例如:
[0-1][0-9]/[0-3][0-9]/[0-9]{2}(?:[0-9]{2})?
如果沒有某種日期字典,則無法可靠地完成任何其他工作。例如,日期的有效性取決于是否為a年。
- 3 回答
- 0 關(guān)注
- 1084 瀏覽
添加回答
舉報