Регулярное выражение |Високосные годы и многое другое - PullRequest
11 голосов
/ 27 декабря 2011

Недавно я искал регулярное выражение для некоторой проверки даты на стороне клиента, и мне не удалось найти такое, которое удовлетворяло бы следующим критериям:

  • Имеет диапазон от 1800 - сейчас
  • Выполняет надлежащую проверку даты с високосными годами
  • MM / DD / YYYY Форма
  • Проверка неверной даты

(Эти ограничения выходили за рамки моей компетенции и являются требованием клиента, несмотря на мои попытки убедить их, что это не так)t лучший маршрут)

Текущий код:

$('input').keyup(function()
{
       var regex = /^(?:(0[1-9]|1[012])[\/.](0[1-9]|[12][0-9]|3[01])[\/.](18|19|20)[0-9]{2})$/;
       $(this).toggleClass('invalid',!regex.test($(this).val()));    
});

Обновление:

Следует отметить, чтопрежде всего, чтобы увидеть, возможно ли такое регулярное выражение (, поскольку использование Regex не является моим выбором в этом вопросе ).Мне известны другие ( и лучше ) варианты проверки даты, однако, как уже упоминалось ранее, - это посмотреть, возможно ли это с помощью регулярного выражения.

Ответы [ 12 ]

0 голосов
/ 14 октября 2014

Я пытался проверить YYYY-MM-DD, где YYYY может быть двухзначным, а MM и DD - одним. Это то, что я придумал. Он рассматривает все века как високосные.

((\d\d)?\d\d-((0?(1|3|5|7|8)|10|12)-(31|30|[21]\d|0?[1-9])|(0?(4|6|9)|11)-(31|30|[21]\d|0?[1-9])|0?2-((2[0-8]|1\d)|0?[1-9]))|(\d\d)?((0|2|4|6|8)(0|4|8)|(1|3|5|7|9)(2|6))-0?2-29)
0 голосов
/ 24 июня 2014

Это RegEx, который я использую для проверки даты на стороне клиента.Он имеет диапазон от 1000 до 2999, проверяет високосные годы и, необязательно, временную часть.Разве это не великолепно :) 1001

var r = /^(0[1-9]|1\d|2[0-8]|29(?=-\d\d-(?!1[01345789]00|2[1235679]00)\d\d(?:[02468][048]|[13579][26]))|30(?!-02)|31(?=-0[13578]|-1[02]))-(0[1-9]|1[0-2])-([12]\d{3})(\s([01]\d|2[0-3]):([0-5]\d):([0-5]\d))?$/gm;

r.test('20-02-2013 10:01:07'); // true
r.test('29-02-1700');          // false
r.test('29-02-1604 14:01:45'); // true
r.test('29-02-1900 20:10:50'); // false
r.test('31-12-2000');          // true
r.test('31-11-2008 05:05:05'); // false
r.test('29-02-2004 05:01:23'); // true
r.test('24-06-2014 24:10:05'); // false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...