2014-02-26 31 views
0

我有一個文本輸入字段,在其中輸入日期。由於各種原因,我無法使用日期選擇器。我希望能夠以任何格式輸入日期,例如d/m/yy或dd/mm/yy或dd/mm/yyyy等等。驗證HTML文本輸入字段作爲任何日期格式匹配

已經輸入了其中一種格式如文本值(假設輸入有效)設置爲以dd/mm/yyyy格式輸入的日期。例如,如果您輸入了1/3/14,我希望將文本設置爲01/03/2014。

到目前爲止,我已經儘可能這得到了,但它似乎並不完全正確: -

  $('.someDate').on("blur", function (event) { 

       var dateRegEx = '^(?:(1[0-2]|0?[1-9])[- /.](3[01]|[12][0-9]|0?[1-9])|(3[01]|[12][0-9]|0?[1-9])[- /.](1[0-2]|0?[1-9]))[- /.](?:[0-9]{2})?[0-9]{2}$'; 
       var day = 0; 
       var month = 0; 
       var year = 0; 
       var matchArray = $(this).val().match(dateRegEx); 
       month = matchArray[0]; 
       day = matchArray[1]; 
       year = matchArray[2]; 
//work out what is the year, month, date etc and set the input text to this 
    }); 

任何幫助,這將是非常讚賞

+0

什麼,以及爲什麼它似乎不太對勁? – iappwebdev

+0

@Simon,如果我輸入的是1/3/14,我預計它會在1天中出現,3個月和14年出現。年份總是空白 - 我試圖改變索引。 – lostinwpf

+0

所以你要求正確的正則表達式... – iappwebdev

回答

0

爲我提供一個工作的小提琴用不同的方法提出問題,在我眼中不那麼複雜。首先,我嘗試獲得日期分隔符。然後我在這個日期分隔符上分割日期並形成一個新的日期。工作小提琴:http://jsfiddle.net/2dVwW/

HTML:

<input id="date" type="text" value="01.03.15" /> 
<button id="transform">Transform</button>Date formatted:<span id="dateFormatted"></span> 

的JavaScript:

$('#transform').click(function() { 
    var date = $('#date').val(); 
    var sepRegEx = '(?:[- /.])'; 
    var sepArray = date.match(sepRegEx); 

    if (!sepArray) { 
     alert("Unknown seperator"); 
     return false; 
    } 

    var sep = sepArray[0]; 
    var dateArray = date.split(sep); 
    var month = dateArray[0]; 
    var day = dateArray[1]; 
    var year = dateArray[2]; 

    if (month.length == 1) { 
     month = '0' + month; 
    } else if (month.length != 2) { 
     alert("Wrong month format"); 
     return false; 
    } 

    if (day.length == 1) { 
     day = '0' + day; 
    } else if (month.length != 2) { 
     alert("Wrong day format"); 
     return false; 
    } 

    if (year.length == 2) { 
     year = '20' + year; 
    } else if (year.length != 4) { 
     alert("Wrong year format"); 
     return false; 
    } 

    var dateFormatted = day + '/' + month + '/' + year; 
    $('#dateFormatted').text(dateFormatted); 
});