2013-10-11 40 views
1

您能告訴我如何驗證日期只有在這種格式mm/dd/yy?我實際上找到了一個解決方案,但它也會在mm-dd-yy時返回true。如何僅以此格式驗證日期mm/dd/yy?

我只需要它在格式爲mm/dd/yy時返回true。

這裏是我的小提琴 : http://jsfiddle.net/naveennsit/Hk2tc/

alert(isDate("1/12/1234")); 

function isDate(txtDate) 

{ 

    var currVal = txtDate; 

    if(currVal == '') 

    return false; 



    //Declare Regex 

    var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; 

    var dtArray = currVal.match(rxDatePattern); // is format OK? 



    if (dtArray == null) 

    return false; 



    //Checks for mm/dd/yyyy format. 

    dtMonth = dtArray[1]; 

    dtDay= dtArray[3]; 

    dtYear = dtArray[5]; 



    if (dtMonth < 1 || dtMonth > 12) 

     return false; 

    else if (dtDay < 1 || dtDay> 31) 

     return false; 

    else if ((dtMonth==4 || dtMonth==6 || dtMonth==9 || dtMonth==11) && dtDay ==31) 

     return false; 

    else if (dtMonth == 2) 

    { 

    var isleap = (dtYear % 4 == 0 && (dtYear % 100 != 0 || dtYear % 400 == 0)); 

    if (dtDay> 29 || (dtDay ==29 && !isleap)) 

      return false; 

    } 

    return true; 

} 

回答

0

您在var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;中使用-。 您未篩選-。 檢查更新fiddle

1

你的問題是你的正則表達式...它也接受/字符。 更改爲

var rxDatePattern = /^(\d{1,2})(-)(\d{1,2})(-)(\d{4})$/; 

然而,這正則表達式也接受日期像40-40-9999 ... 當然,你沒有40天的第40個月做;)

檢查此鏈接,幫助 http://www.regular-expressions.info/dates.html

0

你的問題是在正則表達式...

(\/|-)意味着「接受要麼/-個字符「。

嘗試修改此行:

var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; 

要這樣:

var rxDatePattern = /^(\d{1,2})(\/)(\d{1,2})(\/)(\d{4})$/; 

所不同的是,(\/|-)兩次出現用(\/),其中僅匹配/取代。