2010-09-30 95 views
1

我想要驗證它可以是在短日期格式或長日期格式日期爲mm/dd/yyyy格式短和長日期。 例如:用於某些有效日期。正則表達式來驗證以JavaScript

12/05/2010,12/05/10,10年12月5日,2010年12月5日

var reLong = /\b\d{1,2}[\/-]\d{1,2}[\/-]\d{4}\b/; 
var reShort = /\b\d{1,2}[\/-]\d{1,2}[\/-]\d{2}\b/; 
var valid = (reLong.test(entry)) || (reShort.test(entry)); 
if(valid) 
{ 
return true; 
} 
else 
{ 
return false; 
} 

,但是當我試圖給一個無效的日期爲12這個電流正則表達式失敗/ 05/20-0

+0

codeddict的權利。順便說一句,你可能能夠在2正則表達式結合togeter成一個:^ \ d {1,2} [\/- ] \ d {1,2} [\/- ](\ d {2} | \ d {4 })$ ...並且mm的第一個數字可以進一步優化 - 取決於你想要做什麼。 – DashK 2010-09-30 02:46:39

回答

6

發生這種情況是因爲12/05/20這是您輸入的子字符串12/05/20-0是有效的日期。

爲了避免串匹配,你可以使用錨爲:

/^\d{1,2}[\/-]\d{1,2}[\/-]\d{4}$/ 

但同樣上述允許的日期,如00/00/000029/02/NON_LEAP_YEAR這是無效的。

所以它能夠更好地使用庫函數來完成此驗證。

我能找到一個這樣的庫:datajs

+0

感謝codaddict,是否有任何描述驗證的鏈接??? – nimi 2010-09-30 02:52:03

+0

@Nimesh:我已經用一個這樣的lib更新了我的帖子。 – codaddict 2010-09-30 02:56:26

4

這裏有一個稍微更強大的正則表達式將試圖過濾掉一些不好的日期:

^(1[012]|0[1-9])([\/\-])(0[1-9]|[12]\d|3[01])\2((?:19|20)?\d{2})$ 

輸入(上rubular可見)

01/01/2001 # valid 
10-10-10 # valid 
09/09/1998 # valid 
00-00-0000 # invalid 
15-15-2000 # invalid 

比賽日期:01至31,月份匹配:01-12以及年份匹配1900-2099。這也將迫使你進入一個一致的分​​離器(即:mm/dd/yyyymm-dd-yyyy工作,但mm-dd/yyyy沒有)。

這仍然會採取一些不好的日期(如2000年2月30日),但爲了實用的目的應該是足夠了。這也將分別在捕獲組1,2和3中放置月,日和年。

+0

這會驗證短期和長期日期嗎? – nimi 2010-09-30 02:50:34

+0

@Nimesh是的,它會的 – NullUserException 2010-09-30 02:51:52

+0

我相信這將驗證'01/01-2001' ... – 2010-09-30 02:55:29