Меню Закрыть

Регулярное выражение для даты

Содержание

В статье рассматривается один из способов валидации даты с помощью регулярного выражения в среде Java. Правильность работы регулярного выражения проверяется средствами библиотеки TestNG.

Регулярное выражение для валидации даты

Объяснение регулярного выражения:

Таким образом, корректными с точки зрения данного регулярного выражения форматами даты будут являться даты, записанные в формате DD.MM.YYYY , где DD — 2 цифры дня (с ведущими нулями или без них), MM — 2 цифры месяца (с ведущими нулями или без них), YYYY — четыре цифры года в интервале от 1900 до 2099.

Следует отметить, что данное регулярное выражение не учитывает разное число дней в разных месяцах, а также не учитывает високосные года. Данную проверку мы будем реализовывать в классе-валидаторе.

Валидация даты

Если соблюдение правильного форматирования (могут быть только цифры, разделенные точками, не должно быть больше трех цифр в дне и месяце и так далее) мы можем отдать на откуп регулярному выражению, то соблюдение правил формирования даты (28, 30 или 31 дней в месяце, високосные и невисокосные года) мы должны производить вручную. При этом следует отметить, что високосный год — это не просто год, кратный 4-м. Полное правило определения високосного года выглядит следующим образом:

При возникновении реальной практической задачи валидации даты никаких регулярных выражений и подобных классов писать самостоятельно не следует. С этой задачей отлично справляется класс SimpleDateFormat (JavaDoc здесь ). Рассмотренный здесь пример носит демонстрационный характер.

Корректные форматы даты

Исходя из определенного выше регулярного выражения корректными форматами даты будут являться:

  • 1.1.2010 , 01.01.2010 ;
  • 31.1.2010 , 31.01.2010 ;
  • 29.02.2008 , 29.02.2008 ;
  • 28.2.2009 , 28.02.2009 ;
  • 31.3.2010 , 31.03.2010 ;
  • 30.4.2010 , 30.4.2010 ;
  • 31.5.2010 , 31.05.2010 ;
  • 30.6.2010 , 30.06.2010 ;
  • 31.7.2010 , 31.07.2010 ;
  • 31.8.2010 , 31.08.2010 ;
  • 30.9.2010 , 30.09.2010 ;
  • 31.10.2010 , 30.10.2010 ;
  • 30.11.2010 , 29.11.2010 ;
  • 29.2.2000 , 31.12.2010 .
Читайте также:  Микроволновка с функцией духовки самсунг

Некорректные форматы даты

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

В языке программирования, в частности PHP, регулярные выражения представляют из себя специальные записи «маски», с помощью которых может производиться анализ значений каких-либо переменных согласно установленному шаблону. Удобство использования регулярных выражений в скриптах играет существенную роль, так как программирование само по себе подразумевает работу с данными.

Теперь о том, где могут быть использованы регулярные выражения. К примеру, у вас на сайте есть какая либо форма, которая содержит некоторый набор полей, их предположительно должен заполнить пользователь, и отправить на сервер. На стороне сервера нужно проверять данные на корректность ввода, и тут могут пригодиться регулярные выражения. На самом деле регулярки, как их называют по-простому, могут использоваться в различных участках кода, там, где есть необходимость произвести анализ данных, для дальнейших манипуляций с ними.

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

В данном посту я решил сделать подборку популярных выражений, которые могут пригодиться на практике многократно.

Регулярное выражение для проверки логина:

Регулярное выражение для проверки набора букв и цифр русского и английского алфавита:

Регулярное выражение для проверки корректности доменного имени сайта:

Регулярное выражение для проверки корректности md5-хэша:

Регулярное выражение для проверки шестнадцатеричного значения цвета:

Регулярное выражение для проверки IPv4 адреса:

Регулярное выражение для проверки IPv6 адреса:

Регулярное выражение для проверки MAC-адреса:

Регулярное выражение для проверки даты в формате YYYY-MM-DD:

Регулярное выражение для проверки даты в формате DD/MM/YYYY:

Читайте также:  Темы для монтажа пинакл

Регулярное выражение для проверки времени в формате HH:MM:SS

Статейка будет постепенно дополняться, предлагаю оставлять свои варианты шаблонов регулярных выражений для проверки, не забываем сохранить страничку в закладки:)

Пример использования регулярного выражения:

Дата публикации: 2016-08-10

От автора: приветствую вас друзья. В этой статье мы с вами научимся составлять регулярное выражение для валидации даты и проверки формата даты. Приступим?

Итак, перед нами стоит задача составить шаблон регулярного выражения для проверки строки на соответствие формату даты. Задача, в общем-то, типовая, а значит, можно предположить, что в сети уже есть готовые решения для нашей задачи. Это действительно так. На сайте regexlib.com в разделе готовых регулярок мы можем найти и наш случай:

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

С готовыми решениями регулярных выражений для даты мы разобрались. Теперь давайте попробуем составить свое. Сформулируем техзадание. Итак, нам подходят даты форматов YYYY-MM-DD или YYYY/MM/DD. Прочие варианты даты нас не устраивают.

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Собственно, задача довольно проста и решается буквально в течение минуты:

Давайте разберем этот шаблон:

d <4>— 4 цифры, идущие подряд

d <2>— 2 цифры, идущие подряд

Все вроде бы замечательно и наш шаблон работает. Однако что будет, если пользователь введет в качестве разделителя между цифрами в первой позиции один символ, а во второй — другой?

Упс! Оказывается шаблон пропускает неправильный формат даты. Как же разрешить использовать только один разделитель — тот, который используется на первой позиции? Здесь нам помогут обратные ссылки.

Читайте также:  Как отклеить пломбу наклейку

Смотрите, каждый разделитель мы заключили в скобки с тем, чтобы их сгруппировать и указать возможность альтернативы — (-|/). Буквально это можно прочесть как — (тире или слеш). Но кроме группировки скобки выполняют и другую функцию. Скобки запоминают все то, с чем совпала в строке, заключенная в скобки часть шаблона.

Соответственно, встретив первый разделитель (тире или слеш), он будет запомнен. И доступен он будет по обратной ссылке. Обратные ссылки нумеруются и доступны в таком виде: 1, 2…

То есть, на первый выбранный разделитель ссылается такая ссылка — 1. Она доступна внутри шаблона регулярного выражения, а потому мы можем вместо альтернативы для второго разделителя просто указать обратную ссылку, которая будет ссылаться на введенный первый разделитель:

А вот теперь все работает, как мы и задумывали, регулярное выражение для проверки даты составлено и успешно работает. Ну а на этом у меня сегодня все. Больше о регулярных выражениях вы можете узнать из нашего курса по регулярным выражениям. Удачи!

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Хотите изучить регулярные выражения на PHP?

Посмотрите 12-ти часовой видео курс по регулярным выражениям на PHP!

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.