0

我正在尝试编写验证以使用 javascript 检查日期格式。但是我仍然有错误消息日期格式无效即使我输入了正确的日期格式我不知道我的正则表达式是否正确我在网上找到了它

谢谢你的帮助

function CheckDateFormat()
{
    var StartDateform= document.getElementById('tblTarget').rows[1].cells[StartDate].getElementsByTagName('input')[0].value;
    var pattern;

    // Regular expression used to check if date is in correct format
    pattern= new RegExp("^([0-9]{2})-([0-9]{2})-([0-9]{4})$");

    if(StartDateform.match(pattern))
    {
        var date_array;
        var day;
        date_array = StartDateform.value.split('-');
        day = date_array[0];

        // Attention! Javascript consider months in the range 0 - 11

        var month; 
        var year; 

        month= date_array[1] - 1;
        year= date_array[2];

        // This instruction will create a date object
        //source_date = new Date(year,month,day);

        source_date = new Date(day,month,year);

        if(year != source_date.getFullYear())
        {
            alert('Year is not valid!');
            return false;
        }

        if(month != source_date.getMonth())
        {
            alert('Month is not valid!');
            return false;
        }

        if(day != source_date.getDate())
        {
            alert('Day is not valid!');
            return false;
        }
    }
    else
    {
        alert('Date format is not valid!');
        InvalidFlag=1;
        return false;
    }

    return true;
}
4

1 回答 1

0

您应该考虑使用Moment.js之类的库来为您处理日期解析和验证。它将比您的正则表达式更灵活,并且可以接受各种格式。

如果你想坚持使用正则表达式,regexpal是一个测试 JavaScript 正则表达式的好网站。看起来您的正则表达式成功匹配格式的日期dd-mm-yyyy。你的考试日期是什么时候没有用?因为^and$字符匹配字符串的开头和结尾,所以您的日期不能有任何多余的空格。例如:

"05-07-1998"将匹配正则表达式。

"05-07-1998 "不会匹配它。

编辑:

如果您尝试以格式获取日期,则dd/mm/yyyy需要使用Moment.js或将您的正则表达式更改为:^([0-9]{2})/([0-9]{2})/([0-9]{4})$.

因为您使用/的是分隔日期而不是-,所以还需要更改此行:

date_array = StartDateform.value.split('/'); // must split on '/' instead of '-'
于 2013-07-15T14:43:01.450 回答