Содержание
В статье рассматривается один из способов валидации даты с помощью регулярного выражения в среде 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!