2010-11-21 49 views
1

我有一個日期格式如:YYYY-MM-DD,衆所周知,月份只包含像01,02,03,04,05,06,07,08, 09,10,11,12。我怎樣才能真正寫出一個正則表達式,使我只能得到正確的月份和日期。我只能做這樣的事情......正則表達式的日期

var date = /[0-9]{4}\-[0-9]{2}\-[0-9]{2}/; 

    function checkDate(Date) 
    { 
     if (date.test(Date)) 
     { 
     alert("Valid Date"); 
     } 
      else 
      { 
        alert("Invalid Date"); 
      } 

    } 

因此,如果日期是例如,2008-24-43。它仍然會返回我的有效日期。

謝謝。

+2

我真的不會使用'Date'作爲參數名稱。你會影響Date的構造函數。 (通常,JavaScript慣例是使用camelCase或爲參數名稱[例如,「date」而不是「Date」,以及「niftyThing」或「nifty_thing」而不是「NiftyThing」]加下劃線,而不是首字母大寫。幾乎保留 - 只有通過約定 - 構造函數。除非你是微軟。) – 2010-11-21 08:46:44

回答

2

我建議不要使用正則表達式的路徑。你會遇到比需要更多的問題。相反,請閱讀例如this post以查看以前人們嘗試過的內容。

您應該使用new Date()來檢查輸入的日期是否真的有效。不要重新發明輪子。

對於你的榜樣,您可以使用此:

var strDate = "2008-07-23"; 
var dateParts = strDate.split("-"); 

var date = new Date(dateParts[0], (dateParts[1] - 1) ,dateParts[2]); 

免責聲明:從鏈接的頁面採取的想法。

如果日期無效,您可以使用this post中的策略。

+0

這種方法不起作用。例如:http://jsfiddle.net/eREyq/ – vsync 2011-07-24 10:50:00

6

用正則表達式解析日期可能是一項具有挑戰性的任務。我建議你去看看datejs

3

以下正則表達式可以在1900-01-01和2099-12-31之間以yyyy-mm-dd格式匹配日期,並可選擇四個分隔符: - /。和白色空間。

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

來源:www.regular-expressions.info

0

這會給你的基本檢查:

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

,但它仍然會允許像2001-02-29事情。你可能最好做一個兩階段的過程 - 首先做正則表達式的速度,然後使用DateTime.Parse:

try 
{ 
    DateTime.Parse(Date); 
    alert("Valid Date"); 
} 
catch (FormatException) 
{ 
    alert("Invalid Date"); 
}