2014-01-07 102 views
4

我想用有效的日期時間格式驗證文本框。我需要檢查24小時日期時間格式。所以我輸入以下文本到我的文本框22.05.2013 11:23:22使用JavaScript和正則表達式驗證日期時間

但它仍然沒有正確驗證它。對於正則表達式我是全新的。這是到目前爲止,我已經嘗試

$('#test1').blur(function(){ 
var validTime = $(this).val().match(/^[0,1]?\d\/(([0-2]?\d)|([3][01]))\/((199\d)|([2-9]\d{3}))\s[0-2]?[0-9]:[0-5][0-9]?$/); 
    debugger; 
    if (!validTime) { 
     $(this).val('').focus().css('background', '#fdd'); 
    } else { 
     $(this).css('background', 'transparent'); 
    } 
}); 

這是我fiddle

+0

你從哪裏得到模式表單?爲什麼有'[0,1]'?這將不會允許'22.05.2013'。 – putvande

+0

@putvande從這裏http://stackoverflow.com/questions/16626942/javascript-regex-validate-date-time – Happy

+0

你的正則表達式在日期中使用斜槓而不是點 – ahmad

回答

11

用正則表達式驗證日期非常困難。例如,你如何驗證2月29日? (很難!)

而是我會使用內置的Date對象。它將始終生成有效的日期。如果你這樣做:

var date = new Date(2010, 1, 30); // 30 feb (doesn't exist!) 
// Mar 02 2010 

所以你會知道它是無效的。你看它溢出到3月份,這對所有參數都適用。如果你秒>59它就會溢出來分鐘等

完整的解決方案:

var value = "22.05.2013 11:23:22"; 
// capture all the parts 
var matches = value.match(/^(\d{2})\.(\d{2})\.(\d{4}) (\d{2}):(\d{2}):(\d{2})$/); 
//alt: 
// value.match(/^(\d{2}).(\d{2}).(\d{4}).(\d{2}).(\d{2}).(\d{2})$/); 
// also matches 22/05/2013 11:23:22 and 22a0592013,[email protected] 
if (matches === null) { 
    // invalid 
} else{ 
    // now lets check the date sanity 
    var year = parseInt(matches[3], 10); 
    var month = parseInt(matches[2], 10) - 1; // months are 0-11 
    var day = parseInt(matches[1], 10); 
    var hour = parseInt(matches[4], 10); 
    var minute = parseInt(matches[5], 10); 
    var second = parseInt(matches[6], 10); 
    var date = new Date(year, month, day, hour, minute, second); 
    if (date.getFullYear() !== year 
     || date.getMonth() != month 
     || date.getDate() !== day 
     || date.getHours() !== hour 
     || date.getMinutes() !== minute 
     || date.getSeconds() !== second 
    ) { 
     // invalid 
    } else { 
     // valid 
    } 

} 

的jsfiddle:http://jsfiddle.net/Evaqk/117/

+0

你能用你的代碼修改我的小提琴嗎? – Happy

+0

添加JSFiddle鏈接。 – Halcyon

+0

我們是否也可以檢查日期時間格式22/05/2013 11:23:22? 以前我用過22.05.2013 11:23:22。所以如果用戶輸入/或。那麼兩者都有效 – Happy

1

您需要正確測試正則表達式,以確保它所需的日期格式相匹配。該工具可以幫助您調試表達式:http://regexpal.com/

另外,既然你已經在使用jQuery,你可以嘗試使用驗證插件,如http://formvalidator.net/

+0

日期並不真正遵循正規的語法,特別是如果您考慮閏年。正則表達式不是驗證日期的正確工具。現在是日期格式,當然,但不是實際的日期。 – Halcyon

+0

我完全同意,但如果你檢查OP的問題:「我試圖用'有效的日期時間格式'驗證文本框」 – gimg1

0

嘗試是這樣的:

function checkDateTime(element){ 
    if (!Date.parse(element.value)){ 
    element.style.background = 'red'; 
    element.focus(); 
    return false; 
    } else { 
    element.style.background = 'white'; 
    return true; 
    } 
} 

function checkForm(form){ 
    return checkDateTime(form.mytxtfield01) && checkDateTime(form.mytxtfield02) 
} 

非正則表達式;只有函數Date.parse('...')被使用。