2013-07-15 20 views
0

我想寫一個驗證來檢查使用JavaScript的日期格式。但我仍然有錯誤消息的日期格式不正確,甚至當我輸入正確的日期格式 我不知道我的正則表達式是正確的,我發現它於淨Javascript來檢查數據格式也不能正常工作

感謝您的幫助

function CheckDateFormat() 
{ 
    var StartDateform= document.getElementById('tblTarget').rows[1].cells[StartDate].getElementsByTagName('input')[0].value; 
    var pattern; 

    // Regular expression used to check if date is in correct format 
    pattern= new RegExp("^([0-9]{2})-([0-9]{2})-([0-9]{4})$"); 

    if(StartDateform.match(pattern)) 
    { 
     var date_array; 
     var day; 
     date_array = StartDateform.value.split('-'); 
     day = date_array[0]; 

     // Attention! Javascript consider months in the range 0 - 11 

     var month; 
     var year; 

     month= date_array[1] - 1; 
     year= date_array[2]; 

     // This instruction will create a date object 
     //source_date = new Date(year,month,day); 

     source_date = new Date(day,month,year); 

     if(year != source_date.getFullYear()) 
     { 
      alert('Year is not valid!'); 
      return false; 
     } 

     if(month != source_date.getMonth()) 
     { 
      alert('Month is not valid!'); 
      return false; 
     } 

     if(day != source_date.getDate()) 
     { 
      alert('Day is not valid!'); 
      return false; 
     } 
    } 
    else 
    { 
     alert('Date format is not valid!'); 
     InvalidFlag=1; 
     return false; 
    } 

    return true; 
} 
+0

好第一關,你認爲,什麼日期格式,你應該提交,你實際提交什麼格式?其次,你可以在javascript中使用'console.log();'結合firefox或者chrome的開發者控制檯來調試你的代碼。 – Tro

回答

0

你應該使用類似Moment.js的庫來處理日期解析和驗證。它會比你的正則表達式更靈活,並且可以接受各種格式。

如果你想堅持使用正則表達式,regexpal是一個很好的測試JavaScript正則表達式的站點。它看起來像你的正則表達式成功匹配格式dd-mm-yyyy的日期。你的測試日期沒有成功?由於^$字符匹配字符串的開頭和結尾,因此您的日期不能有任何額外的空格。例如:

"05-07-1998"將匹配正則表達式。

"05-07-1998 "將不匹配它。

編輯:

如果你想獲得日期的格式dd/mm/yyyy,你需要或者使用Moment.js或更改您的正則表達式爲:^([0-9]{2})/([0-9]{2})/([0-9]{4})$

因爲你使用/來界定您的日期,而不是-,這條線將需要也需要改變:

date_array = StartDateform.value.split('/'); // must split on '/' instead of '-' 
+1

對不起,我試圖得到一個格式dd/mm/yyyy我測試了數據15/07/2013沒有工作的代碼。我很抱歉,我更多的是一個數據庫人,所以我是新的與JavaScript –

+1

我更新了我的答案,以反映你應該使用的新的正則表達式。 –