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

363

Від автора: вітаю вас друзі. У цій статті ми з вами навчимося складати регулярний вираз для валідації дати і перевірки формату дати. Приступимо?

Отже, перед нами стоїть завдання скласти шаблон регулярного виразу для перевірки рядка на відповідність формату дати. Завдання, загалом, типова, а значить, можна припустити, що в мережі вже є готові рішення для нашої задачі. Це дійсно так. На сайті regexlib.com у розділі готових регулярок ми можемо знайти і наш випадок:

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

Тут на вибір є навіть кілька варіантів, які можуть працювати з тим чи іншим форматом дати. Так що можемо взяти вже готову регулярку, якщо вона нам підійде.

З готовими рішеннями регулярних виразів для дати ми розібралися. Тепер давайте спробуємо скласти своє. Сформулюємо техзавдання. Отже, нам підходять форматів дати YYYY-MM-DD або YYYY/MM/DD. Інші варіанти дати нас не влаштовують.

Власне, завдання досить проста і вирішується буквально протягом хвилини:

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

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

\d{4} — 4 цифри, що йдуть підряд

(-|\/) — тире або слеш

\d{2} — 2 цифри, що йдуть підряд

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

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

Упс! Виявляється шаблон пропускає неправильний формат дати. Як же вирішити використовувати тільки один роздільник — той, який використовується на першій позиції? Тут нам допоможуть зворотні посилання.

Дивіться, кожен роздільник ми уклали в дужки з тим, щоб їх згрупувати та вказати можливість альтернативи — (-|\/). Буквально це можна прочитати як — (тире або слеш). Але крім угруповання дужки виконують й іншу функцію. Дужки запам’ятовують усе те, з чим збіглася в рядку, укладена в дужки частина шаблону.

Відповідно, зустрівши перший роздільник (тире або слеш), він буде запомнен. І доступний він буде зворотнього посилання. Зворотні посилання нумеруються і доступні в такому вигляді: \1, \2…

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

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

А ось тепер все працює, як ми і планували, регулярний вираз дати для перевірки складено і успішно працює. Ну а на цьому у мене все. Більше про регулярних виразах ви можете дізнатися з нашого курсу з регулярними виразами. Удачі!