2016-06-12 3 views
-3

Я использую этот шаблон регулярного выражения для проверки времени даты:Regex шаблон для проверки времени даты

$regexp = 
"/^([0][1-9]|[12][0-9]|3[0-1])\\/([0][1-9]|1[0-2])\\/(\d{4}) ([0-9]|1[0-2])\\:([0-5][0-9]) (am|pm)$/"; 

Это не проверка этого input (но должно быть):

11/06/2016 06:28 pm 

Где проблема с этим?

+0

* Что * проблема? Вопросы, требующие помощи по отладке («** почему этот код не работает? **)) должны включать в себя желаемое поведение, * конкретную проблему или ошибку * и * кратчайший необходимый код * для воспроизведения ** в самом вопросе * *. Вопросы без ** ясного заявления о проблеме ** не полезны для других читателей. См.: [Как создать минимальный, полный и проверенный пример.] (Http://stackoverflow.com/help/mcve) –

+0

Дикая догадка, так как вы не даете нам столько работы, что вы получаете ошибка '(не является допустимым модификатором', правильно? Это потому, что char перед этим/является модификатором, и он не экранируется. Так что на обоих/в шаблоне сделайте их \/и посмотрите, работает ли это. – Andreas

+0

Для ясности : '$ regexp ="/^ ([0] [1-9] | [12] [0-9] | 3 [0-1]) \/([0] [1-9] | 1 [0- 2]) \/(\ d {4}) ([0-9] | 1 [0-2]): ([0-5] [0-9]) (am | pm) $/";' – Andreas

ответ

1

Вы имели ошибку в течение нескольких часов. Ваша строка - двухзначный час, но регулярное выражение - одна цифра.

preg_match("/([0][1-9]|[12][0-9]|3[0-1])\/([0][1-9]|1[0-2])\/(\d{4}) (0[0-9]|1[0-2]):([0-5][0-9]) (am|pm)/", $time); 

http://www.phpliveregex.com/p/g0B

+0

сделали это изменение .. но все же строка не принимается. –

+0

@harshagarwal нечетный .. можете ли вы опубликовать строку? Я имею в виду полную строку, потому что ваш паттерн говорит, что strin может иметь только время как значение, ничего больше.Если вы удалите^при запуске и $ в конце, он может обрабатывать строку, такую ​​как: «Я ехал с работы в 11/06/2016 06:28 pm», но с $ и^он может соответствовать только 11/06/2016 06:28 pm' – Andreas

+0

thanx ... его рабочий .. :) –

0

Вы можете попробовать это:

'^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/(19|20)\d{2} (0[0-9]|1[0-2]):[0-5][0-9] (am|pm)$' 

Он будет проверять даты между 01/01/1900 до 31/12/2099 (дд-мм-гггг) со временем в формате чч: мм с утром или вечером.

Или используйте ниже, чтобы подтвердить все годы, кроме 0000:

'^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/\d{4}(?<!0000) (0[0-9]|1[0-2]):[0-5][0-9] (am|pm)$' 
+0

Почему вы положили год первым? У его струны последний год. – Andreas

+0

О! Я не видел его пример строки –

+0

Продолжайте чистку ... 'Также вы используете \ d {4}, который будет захватывать 4 цифры, но вам нужно 2 цифры в дд, как в yyyy-mm-dd.' :-) – Andreas

Смежные вопросы