2012-05-28 111 views
1

我想使用JavaScript正則表達式來驗證出生日期的文本框。這裏是我的代碼正則表達式模式錯誤

var patt=/[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}/; 
alert(patt.test("1985/08/03")); 

和錯誤說:SyntaxEror:意外的標記{

我不明白爲什麼,這種模式在asp.net的RegularExpressionValidator控制器正常工作。 非常感謝

+0

我希望你沒有做任何國際的事情,或至少指定所需的格式,因爲否則日期可能是'2012-11-13'或'20.10.2012'等。 –

+0

我使用了日期選擇器,格式是固定的,但我認爲有些人會輸入一些東西,所以我使用RE來驗證 – pita

回答

4

你需要躲避/字符,否則解釋看到的第一個和認爲這是正則表達式的結尾。

你也應該把錨在你的正則表達式,以確保它的整個字符串匹配和不匹配而這恰好包含該模式的任意字符串。

爲了簡便起見,您可以使用\d代替[0-9],太:

var patt = /^\d{1,2}\/\d{1,2}\/\d{4}$/; 

注意:您的樣品不工作 - 你已經把今年第一,但重新期待它是最後一次。

+0

我只是想使用示例來測試RE,但非常感謝你 – pita

2

這裏的樣本代碼,真的驗證在JavaScript中的日期:

function isValidDate(dateStr) { 
    s = dateStr.split('/'); 
    d = new Date(+s[2], s[1]-1, +s[0]); 
    if (Object.prototype.toString.call(d) === "[object Date]") { 
     if (!isNaN(d.getTime()) && d.getDate() == s[0] && 
      d.getMonth() == (s[1] - 1)) { 
      return true; 
     } 
    } 
    return false; 
} 

Detecting an "invalid date" Date instance in JavaScript

1

問題是,你不是逃避模式中的/分隔符。嘗試

/[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}/; 
0

正則表達式(修復非轉義的'/'後)將只檢查正確的位數。
根據月份和閏年,它不會檢查月份是否在1到12之間,1到31之間的日期,或者30或28或29日。

如果這足以讓你,你可以用正則表達式得到最接近的是(假設DD/MM/YYYY):

/(3[01]|[12][0-9]|0?[1-9])\/(1[012]|0?[1-9])\/([12][0-9]{3})/

天將在範圍1-31
本月在範圍內1-12
我冒昧地將年限從1000年限制在2999年,但如果您想限制從1970年到2059年的年份,則可以使用(19[789][0-9]|20[0-5][0-9])
你會得到1美元的一天,2美元的一個月和3美元的一年(我認爲)