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。うまくいかなかったテスト日は何ですか? ^および文字は文字列の最初と最後に一致するため、$日付に余分なスペースを含めることはできません。例えば:

"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 に答える