регулярные выражения php проверка даты
Подборка шаблонов регулярных выражений
В языке программирования, в частности PHP, регулярные выражения представляют из себя специальные записи «маски», с помощью которых может производиться анализ значений каких-либо переменных согласно установленному шаблону. Удобство использования регулярных выражений в скриптах играет существенную роль, так как программирование само по себе подразумевает работу с данными.
Теперь о том, где могут быть использованы регулярные выражения. К примеру, у вас на сайте есть какая либо форма, которая содержит некоторый набор полей, их предположительно должен заполнить пользователь, и отправить на сервер. На стороне сервера нужно проверять данные на корректность ввода, и тут могут пригодиться регулярные выражения. На самом деле регулярки, как их называют по-простому, могут использоваться в различных участках кода, там, где есть необходимость произвести анализ данных, для дальнейших манипуляций с ними.
Ранее в нашем блоге так же публиковались статьи о парсинге текста и замене в них ссылок, извлечении ссылок из веб-страниц, и т.д. В отборе нужных данных из общей массы там так же используются регулярные выражения.
В данном посту я решил сделать подборку популярных выражений, которые могут пригодиться на практике многократно.
Регулярное выражение для проверки логина:
Регулярное выражение для проверки набора букв и цифр русского и английского алфавита:
Регулярное выражение для проверки корректности доменного имени сайта:
Регулярное выражение для проверки корректности md5-хэша:
Регулярное выражение для проверки шестнадцатеричного значения цвета:
Регулярное выражение для проверки IPv4 адреса:
Регулярное выражение для проверки IPv6 адреса:
Регулярное выражение для проверки MAC-адреса:
Регулярное выражение для проверки даты в формате YYYY-MM-DD:
Регулярное выражение для проверки даты в формате DD/MM/YYYY:
Регулярное выражение для проверки времени в формате HH:MM:SS
Статейка будет постепенно дополняться, предлагаю оставлять свои варианты шаблонов регулярных выражений для проверки, не забываем сохранить страничку в закладки:)
Пример использования регулярного выражения:
PHP Regex для проверки даты в формате ГГГГ-ММ-ДД
Я пытаюсь проверить, что даты, введенные конечными пользователями, находятся в YYYY-MM-DD. Regex никогда не был моей сильной стороной, я продолжаю получать ложное возвращаемое значение для preg_match () у меня есть настройка.
Поэтому я предполагаю, что я создал беспорядок регулярного выражения, подробно описанный ниже.
Вероятно, лучше использовать другой механизм для этого.
Современное решение с DateTime :
Решение для старой школы с explode и checkdate :
Это подтверждает, что ввод также является допустимой датой. Вы можете сделать это с помощью регулярного выражения, но это будет более суетным – и 29 февраля не может быть проверено с помощью регулярного выражения вообще.
Недостатком этого подхода является то, что вы должны быть очень осторожны, чтобы отвергать все возможные «плохие» входы, не вызывая уведомления ни при каких обстоятельствах. Вот как:
Критерии:
Каждый год, делящийся на 4, представляет собой високосный год, за исключением случаев, когда он делится на 100, если он не делится на 400. Итак:
Февраль имеет 29 дней в високосный год и 28, когда не високосный год
30 дней в апреле, июне, сентябре и ноябре
31 день в январе, марте, мае, июле, августе, октябре и декабре
Контрольная работа:
Следующие даты должны пройти проверку:
Следующие даты должны быть недействительными:
Ассортимент:
Мы проверим даты с 1 января по 31 декабря 29 декабря 2999 года. Технически используемый в настоящее время григорианский календарь использовался только в 1753 году для Британской империи и в разные годы в 1600-х годах для стран Европы, но я не собираюсь беспокоиться об этом.
Regex для проверки на високосный год:
Годы, делящиеся на 400:
Годы, делящиеся на 4:
Годы, делящиеся на 100:
Годы, делящиеся на 100, но не на 400:
Делимое на 4, но не на 100:
Действительный месяц и день, исключая февраль (ММ-ДД):
Февраль с 28 днями:
Февраль с 29 днями:
Действительной датой:
Итак, у вас есть регулярное выражение для дат между 1 января 1000 и 31 декабря 2999 года в формате ГГГГ-ММ-ДД.
Я подозреваю, что его можно немного сократить, но я оставлю это кому-то еще.
Это будет соответствовать всем действительным датам. Если вы хотите, чтобы он был действителен только в том случае, если он содержит только одну дату и ничего больше, а затем заверните его в ^( )$ так:
Если вы хотите его для дополнительной записи даты (то есть, она может быть пустой или действительной датой), добавьте ^$| в начале, вот так:
Вы можете сделать это так:
но вам лучше использовать это:
в этом случае вы получите объект, который проще использовать, чем просто строки.
Вы можете использовать preg_match с функцией checkdate php
preg_match нуждается в / или другом символе в качестве разделителя.
вы также должны проверить действительность этой даты, чтобы у вас не получилось что-то вроде 9999-19-38
Я знаю, что это старый вопрос. Но я думаю, что у меня есть хорошее решение.
Можешь попробовать. Если вы измените дату на 21.02.2016, эхо будет ложным. И если вы измените формат после этого на dmY, эхо будет истинным.
С помощью этого простого кода вы сможете проверить, какой формат даты используется, не проверяя его регулярным выражением.
Может быть, есть человек, который будет проверять его на каждом случае. Но я думаю, что моя идея в целом действительна. Для меня это кажется логичным.
Если вы хотите сопоставить этот тип даты, используйте:
Это должно сказать вам, является ли формат действительным, и если дата ввода действительна.
Все зависит от того, насколько строго вы хотите, чтобы эта функция была. Например, если вы не хотите разрешать месяцы выше 12 и дней выше 31 (не в зависимости от месяца, для чего потребуется запись даты-логики), это может стать довольно сложным:
Лично я бы просто пошел за: /^(2<4>\-(7<2>\-2<2>)$/
Чтобы работать с датами в php, вы должны следовать стандарту php, поэтому данное регулярное выражение гарантирует, что у вас есть действительная дата, которая может работать с PHP.
Проверка и проверка YYYY-MM-DD в одной строке
Допускаются день и месяц без начального нуля. Если вы не хотите разрешать это, регулярное выражение должно быть:
Регулярное выражение формата даты
Дата публикации: 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!
Проверка данных регулярными выражениями в PHP
Содержание:
Сборник основных шаблонов регулярных выражений на PHP для проверки данных.
Проверка набора из латинских букв и цифр
Регулярное выражение для проверки набора только из латинских букв и цифр:
Если необходимо добавить в набор некоторые символы:
Проверка на кириллицу и цифры
Регулярное выражение для проверки набора только из букв кириллицы и цифр:
Проверка на число
Регулярное выражение для проверки данных на целое число:
Регулярное выражение для проверки данных на тип Float (числа с плавающей точкой):
Проверка логина
Регулярное выражение для проверки логина. Разрешено использовать только латинские буквы, цифры, тире и знак подчёркивания. Длина логина от 2 до 20 символов (включительно):
Проверка Email
Регулярное выражение для проверки Email:
Проверка номера телефона
Регулярное выражение для проверки номера телефона:
Проверка даты по формату
Формат MySQL YYYY-MM-DD :
Проверка md5-хэша
Регулярное выражение для проверки на корректность md5-хэша:
Проверка IP адресов
Регулярное выражение для проверки IPv4 адреса:
Проверка IPv6 адреса:
Проверка доменного имени
Регулярное выражение для проверки на корректность доменного имени сайта:
Русские Блоги
Регулярное выражение для проверки даты и ее комментарий (включая проверку високосного года)
1. Регулярные выражения для проверки даты добавить суждение високосного года и анализ идей
Прежде чем войти в тему, нам необходимо уточнить два понятия:
Во-первых, что такое допустимый диапазон дат? Для разных прикладных сценариев эта проблема имеет разные интерпретации. Соглашения в MSDN приняты здесь:
DateTimeТип значения представляет дату и время в диапазоне от AD (христианская эра) 1 января 0001 до полуночи с 12:00:00 до AD (C.E.) 31 декабря 9999 23:59:59 PM.
Где 1 также можно выразить как / d, но / d не так интуитивно понятен, как 4, поэтому я всегда буду использовать 1
Согласно приведенным выше результатам, мы можем получить регулярное выражение, которое соответствует формату даты года в формате ГГГГ-ММ-ДД:
Затем мы подошли к решению второй проблемы: учет високосных лет. Согласно определению високосного года, мы можем разделить високосный год на две категории:
1. Годы делятся на 4, но не делятся на 100. Ища шаблон изменения последних двух цифр, вы можете быстро получить следующее регулярное совпадение:
2. Регулярное выражение самой сильной даты проверки с добавлением проверки високосного года.
Поддержка регулярных выражений для этой даты
YYYY-MM-DD
YYYY/MM/DD
YYYY_MM_DD
YYYY.MM.DD форма
match : 2008-2-29 2008/02/29
not match : 2008-2-30 2007-2-29
В високосном году в феврале 29 дней, поэтому регулярное выражение, соответствующее формату даты високосного года, имеет вид YYYY-MM-DD:
Наконец, объединяя выражения проверки даты для обычного года и високосного года, мы получаем окончательное регулярное выражение с форматом даты проверки YYYY-MM-DD в виде:
Обычное проверочное выражение в формате ДД / ММ / ГГГГ:
Ниже приведен код Java, помеченный комментариями: