2012-09-18 73 views
4

我想驗證歐洲日期格式,如「10.02.2012」或「10-02-2012」。因此,我創建了下面的正則表達式:正則表達式:使用多個分隔符驗證歐洲日期格式

/\d[0-9]{2}(.|-)\d[0-9]{2}(.|-)\d[0-9]{4}/ 

不幸的是,我總是得到的消息不是有效的,即使當日期有正確的格式。

當我用「。」替換「(。| - )」時。用於驗證僅使用工作點分隔的日期。所以我想這個問題一定是「(。| - )」 任何想法?

+0

點必須是逃脫,如\。意思是文字。字符,但它仍然應該正確匹配,它只是無法過濾其他分隔符字符。或 - – WebChemist

回答

3

它工作正常稍作修改後:

\d{2}(\.|-)\d{2}(\.|-)\d{4} 
  1. 了 「」需要逃脫。

  2. \ d與[0-9]相同,不需要重複。

http://regexr.com?326f2

+0

是的,但範圍只是方括號內的一個因素,不是嗎? Dash不需要轉義 – WebChemist

+0

剛剛在ruby-console中試過了,但它沒有工作:'1.9.3-p0:055> regex = /d{2}(\.|\-)\d{2 }(\。| \ - )\ d {4}/ => /d{2}(\.|\-)\d{2}(\.|\-)\d{4}/ 1.9。 3-p0:056> string =「20.10.2012」 => 20.10.2012「 1.9.3-p0:057> if string =〜regex 1.9.3-p0:058?> puts」correct「 1.9.3-p0:059?> else 1.9.3-p0:060> puts「false」 1.9.3-p0:061?> end false => nil' – flyte321

+0

@WebChemist thx,正確。 – DhruvPathak

1

好,我看到你的問題......

/\d[0-9]{2}(.|-)\d[0-9]{2}(.|-)\d[0-9]{4}/ 

是多餘的,因爲\ d相同[0-9],所以實際上現在你在這裏爲匹配3位不2.嘗試

/\d{2}(\.|-)\d{2}(\.|-)\d{4}/ 

/[0-9]{2}(\.|-)[0-9]{2}(\.|-)[0-9]{4}/ 

但不要同時使用

6

注意的是,到目前爲止的答案提供了使用\ d字符類允許的日期,如00.00.0000或99.99.9999通過。如果你想抓住這個,你需要使用更具體的正則表達式。下一個將允許01.01.1900和2099年12月31日

^([1-9]|0[1-9]|[12][0-9]|3[01])[-\.]([1-9]|0[1-9]|1[012])[-\.](19|20)\d\d$ 

之間的有效日期,如果你要允許任何一年,從0000到9999,那麼你可以將其更改爲

^([1-9]|0[1-9]|[12][0-9]|3[01])[-\.]([1-9]|0[1-9]|1[012])[-\.]\d{4}$