регулярное выражение для определенного формата даты - PullRequest
0 голосов
/ 23 сентября 2011

Я хочу иметь регулярное выражение для формата даты, Пример: 01-Jan-2011

Я написал ^[0-9]{1,2}-[a-zA-Z]{3}-[0-9]{4}, но не проверил все действительные даты, например 50-AAA-2011, также будет считаться действительным.

Я использую Live Validation lib в javascript

Мой код

var sayDate = new LiveValidation('date');
    sayDate.add( Validate.Format, { pattern: /^[0-9]{1,2}-[a-zA-Z]{3}-[0-9]{4}/i });

Пожалуйста, помогите!

Ответы [ 4 ]

2 голосов
/ 23 сентября 2011

Как насчет:

^(0?[1-9]|[1-2][0-9]|3[0-1])-(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)-[1-2][0-9]{3}$

Это по-прежнему будет разрешено 31-Фев-2011, поэтому для проверки фактической даты вам, вероятно, потребуется использовать что-то иное, чем регулярное выражение

1 голос
/ 23 сентября 2011

Синтаксис даты можно проверить с помощью JavaScript регулярные выражения .Вы можете проверить семантику, используя объект Date , например:

function ValidateCustomDate(d) {
    var match = /^(\d{1,2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{4})$/.exec(d);
    if (!match) {
        // pattern matching failed hence the date is syntactically incorrect
        return false;
    }
    var day = parseInt(match[1], 10); // radix (10) is required otherwise you will get unexpected results for 08 and 09
    var month = {
        Jan: 0,
        Feb: 1,
        Mar: 2,
        Apr: 3,
        May: 4,
        Jun: 5,
        Jul: 6,
        Aug: 7,
        Sep: 8,
        Oct: 9,
        Nov: 10,
        Dec: 11
    }[match[2]]; // there must be a shorter, simpler and cleaner way
    var year = parseInt(match[3], 10);
    var date = new Date(year, month, day);
    // now, Date() will happily accept invalid values and convert them to valid ones
    // 31-Apr-2011 becomes 1-May-2011 automatically
    // therefore you should compare input day-month-year with generated day-month-year
    return date.getDate() == day && date.getMonth() == month && date.getFullYear() == year;
}
console.log(ValidateCustomDate("1-Jan-2011"));  // true
console.log(ValidateCustomDate("01-Jan-2011")); // true
console.log(ValidateCustomDate("29-Feb-2011")); // false
console.log(ValidateCustomDate("29-Feb-2012")); // true
console.log(ValidateCustomDate("31-Mar-2011")); // true
console.log(ValidateCustomDate("31-Apr-2011")); // false
1 голос
/ 23 сентября 2011

Попытка проверить формат даты с помощью регулярных выражений на самом деле намного сложнее, чем кажется. Вы можете выполнить базовую проверку довольно легко, но всегда есть что еще сделать, чтобы сделать ее идеальной.

Я бы предложил вместо этого использовать либо элемент управления выбора даты, который может выполнить проверку для вас (а также дает вам бонус в виде приятной блестящей функции пользовательского интерфейса), либо одну из существующих библиотек JavaScript, которая может обрабатывать даты вы.

Для элементов управления выбора даты существует любое количество параметров jQuery. Для библиотек обработки дат я бы предложил поискать date.js .

Надеюсь, это поможет.

1 голос
/ 23 сентября 2011

Что ж, если вы хотите, чтобы только январь-декабрь был проверен, вам нужно указать его в RegEx.И затем вы должны проверить, правильно ли зелье даты.И затем, действительно ли эта дата действительна для данного месяца или года, и есть много других случаев.Я считаю, что RegEx не является решением для этого.Вы пытались использовать Date.parse что-то вроде Datejs ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...