Регулярное выражение в соответствии с датами в формате Yyyy-MM-DD

StackOverflow https://stackoverflow.com/questions/1711727

  •  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}$/

которые соответствуют началу и концу строки соответственно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top