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



我有日期输入,需要将其存储为DD-MMM-YYYY。我有下面的代码要测试。在大多数情况下,它确实确保数据是DD MMM YYYY格式,但我需要包括连字符。例如,2015年6月1日被认为是有效的,但2015年1月1日也是有效的。第二个应该失败。我试着把连字符包括在内,但没有成功。

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

就我个人而言,我想我会使用moment.js库来做你想做的事情。他们已经为你制定了所有这些机制,然后还有一些:

http://momentjs.com/docs/#/parsing/is-有效/

这比自己做要麻烦得多,效率也高得多。

最新更新