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

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

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

Итак, перед нами стоит задача составить шаблон регулярного выражения для проверки строки на соответствие формату даты. Задача, в общем-то, типовая, а значит, можно предположить, что в сети уже есть готовые решения для нашей задачи. Это действительно так. На сайте 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!

Смотреть

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

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