Javascript验证日期格式(包括连字符)

时间:2015-06-29 17:42:07

标签: javascript date

我有日期输入,我需要存储为DD-MMM-YYYY。我有下面的代码来测试。在大多数情况下,它确保数据采用DD MMM YYYY格式,但我需要包含连字符。例如01-JUN-2015被认为是有效的,但01 / JUN / 2015也是如此。第二个应该失败。我试图将连字符包括在内但没有成功。

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

1 个答案:

答案 0 :(得分:0)

我个人认为,我会选择moment.js库来做你想做的事。他们为你准备了所有这些机制,然后是一些:

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

与自己动手相比,这不是一件麻烦事,而是更有效率。