2015-06-29 1 views
0

У меня есть входные данные, которые мне нужно хранить как DD-MMM-YYYY. У меня есть код ниже, чтобы проверить. По большей части он гарантирует, что данные находятся в формате DD MMM YYYY, но мне нужно включить дефисы. Например, 01-JUN-2015 считается действительным, но также 01/JUN/2015. Второй должен потерпеть неудачу. Я попытался включить дефисы без успеха.Javascript проверяет формат даты (включая дефисы)

function testDate(sender, args) { 
    var result = isDate(document.getElementById('dateTest').value); 
    console.log(document.getElementById('dateTest').value); 
    console.log(result); 
    $('#result').text(result); 

} 

//function isDate(txtDate) { 
function isDate(currVal) { 

    if (currVal == '') return false; 

    //Declare Regex 
    var rxDatePattern = /^(\d{1,2})(\/|-)(?:(\d{1,2})|(jan)|(feb)|(mar)|(apr)|(may)|(jun)|(jul)|(aug)|(sep)|(oct)|(nov)|(dec))(\/|-)(\d{4})$/i; 

    var dtArray = currVal.match(rxDatePattern); 

    if (dtArray == null) return false; 

    var dtDay = parseInt(dtArray[1]); 
    var dtMonth = parseInt(dtArray[3]); 
    var dtYear = parseInt(dtArray[17]); 

    if (isNaN(dtMonth)) { 
     for (var i = 4; i <= 15; i++) { 
      if ((dtArray[i])) { 
       dtMonth = i - 3; 
       break; 
      } 
     } 
    } 

    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; 
    } 

ответ

0

Лично я думаю, что я поеду с библиотекой moment.js, чтобы делать то, что вы хотите сделать. У них есть все эти механики работали для вас, а затем некоторые из них:

http://momentjs.com/docs/#/parsing/is-valid/

Это намного меньше хлопот и способ более эффективен, чем делать это самостоятельно.

+0

К сожалению, я не имею кодовой базы и не могу добавить сторонние библиотеки. Мне нужно заполнить его в собственном javascript. – user2924127

+1

только для того, чтобы быть понятным, вы хотите, чтобы 01-JUN-2015 преуспели, а 01/JUN/2015 потерпеть неудачу? Если это так, те части в регулярном выражении виноваты: '(\/| -)' они должны быть '(-)' – Osuwariboy

+0

ЭТО! Большое спасибо! – user2924127