Формат проверки даты регулярного выражения

Может ли кто-нибудь помочь мне, как изменить формат даты этой проверки jquery с ГГГГ-ММ-ДД на ММ/ДД/ГГГГ.

Пример:

2014-02-21 must be 02/21/2014

Я пытался изменить это: new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/);

To: new RegExp(/^((0?[13578]|10|12)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[01]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1}))|(0?[2469]|11)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[0]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1})))$/);

Но все же я не могу получить правильное подтверждение, которое хочу.

Вот код:

            "date": {
                //  Check if date is valid by leap year
        "func": function (field) {
                var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/); //<---- The Original Pattern of YYYY-MM-DD
                var match = pattern.exec(field.val());
                if (match == null)
                   return false;

                var year = match[1];
                var month = match[2]*1;
                var day = match[3]*1;
                var date = new Date(year, month - 1, day); // because months starts from 0.

                return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day);
            },
         "alertText": "* Invalid date, must be in YYYY-MM-DD format"
            }

Пожалуйста, помогите мне .. спасибо .. :)


person Nick John Bueno    schedule 21.02.2014    source источник
comment
Почему люди думают, что регулярное выражение — лучший способ проверки дат? Просто разделите его на числа, а затем проверьте диапазон.   -  person Barmar    schedule 21.02.2014
comment
Я только новичок, сэр. Я просто хочу знать, как изменить формат из основ. Спасибо   -  person Nick John Bueno    schedule 21.02.2014


Ответы (3)


Я думаю, вы должны попробовать это.

var pattern = new RegExp(/^\d{4}-((0\d)|(1[012]))-(([012]\d)|3[01])$/);

Но это не будет проверять дни в месяце, например, 31 февраля. Но это было бы долгим способом сделать это с помощью RegEx.

person Rohan    schedule 21.02.2014
comment
У меня это все еще не сработало, я думаю, что есть код, который нужно изменить var year = match[1]; var месяц = ​​совпадение[2]*1; вар день = матч[3]*1; var date = новая дата (год, месяц - 1, день); // потому что месяцы начинаются с 0. return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day); - person Nick John Bueno; 21.02.2014
comment
Почему месяц начинается с 0? - person Rohan; 21.02.2014

Месяцы

(0?[1-9]|1[012])

Дни

(0?[1-9]|[12][0-9]|3[01])

Годы

(19|20)?[0-9]{2}

Недостатки:

  • Будут матчи 29-31 февраля, 31 декабря и т. д.
person Vasili Syrakis    schedule 21.02.2014

попробуйте следующее регулярное выражение

обратите внимание, что он просто проверяет, только формат не проверяет, является ли год високосным или нет

function validateDate(testDate){    

    var date_regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/ ;
    return date_regex.test(testDate);

        }
person Sarath    schedule 21.02.2014