Регулярное выражение в соответствии с датами в формате Yyyy-MM-DD
-
19-09-2019 - |
Вопрос
У меня регулярное выражение в PHP, которое ищет дату в формате Yyyy-MM-DD
Что у меня есть: [\d]{4}-[\d]{2}-[\d]{2}
Я использую preg_match для проверки даты, проблема в том, что 2009-11-10
работает, но 2009-11-1033434
работает так же. Прошло некоторое время с тех пор, как я закончил Режим, как я могу убедиться, что она остановится в правильном месте? Я пытался сделать /([\d]{4}-[\d]{2}-[\d]{2}){1}/
, но это возвращает тот же результат.
Любая помощь будет очень оценена.
Решение
Вам нужно якоря, в частности ^
а также $
. Анкет Первый соответствует началу струны, последний соответствует концу.
Другой момент, который я бы сделал, - это []
не нужны. \d
сохраняет свое значение вне диапазонов характера.
Так что ваша регуляция должна выглядеть так: /^\d{4}-\d{2}-\d{2}$/
.
Другие советы
Как вы ожидаете, что ваша дата будет прекращена?
Если конец линии, то следующее $
должен сделать свое дело.
Если с помощью немотизированного персонажа, то следующий отрицательный утверждение (?!\d)
Аналогично будет работать.
^20[0-2][0-9]-((0[1-9])|(1[0-2]))-([0-2][1-9]|3[0-1])$
Я добавил немного дополнительной проверки, чтобы помочь с проблемой MM
а также DD
Смешанный пользователем. Это не ловит все микширование свиданий, но сохраняет YYYY
часть между 2000
а также 2029
, MM
между 01
а также 12
и DD
между 01
а также 31
Вы, вероятно, хотите поставить якоря на выражение. т.е.
^[\d]{4}-[\d]{2}-[\d]{2}$
Обратите внимание на карету и знак доллара.
[\d]{4}-[\d]{2}-[\d]{2}?
где знак вопроса означает «не-сердитый»
Вы, вероятно, хотите посмотреть на утверждения в будущем (при условии, что ваш двигатель поддерживает их, PHP/Preg/PCRE делает)
Посмотрите в будущее утверждения (или положительные утверждения) позволяют вам сказать «и за ним следует X, но X не должен быть частью матча). Попробуйте следующий синтаксис
\d{4}-\d{2}-\d{2}(?=[^0-9])
Утверждение является этой частью
(?=[^0-9])
Он говорит: «После моей корпорации, следующий персонаж не может быть числом»
Если это не дает вам того, что вы хотите/нужно, опубликуйте пример своего ввода и вашего PHP -кода, который не работает. Эти два предмета могут очень полезны для отладки подобных проблем.
Вы могли бы попробовать поставить символ «^» и «$» в начале и в конце своего выражения:
/^[\d]{4}-[\d]{2}-[\d]{2}$/
которые соответствуют началу и концу строки соответственно.