вопросик по рег выражениям

jeno

Новичок
вопросик по рег выражениям

нужно проверить, правильно ли юзер ввел дату и время..

строка выглядит так:

06.01.08 11:11:11

так вот...все ок, вот только кое что мне не понятно :( надо чтоб часы небыли больше 24х...
т.е.чтоб юзер не вписал 06.01.08 99:11:11 (тоже самое с месяцами,минутами и секундами)

как это в регулярном выражении проверить?!?!?!

вот кусочек, который проверяет правильно ли юзер ввел время:

PHP:
... [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$...
 

Фанат

oncle terrible
Команда форума
все равно в таком формате дату хранить нельзя.
поэтому рег у тебя пусть делает не проверку, а разбивку.
а разбив - проверять с помощью checkdate()

рег же писать ты такой запаришься, но если очень хочется - гугль на месте.
 

jeno

Новичок
значит буду юзать checkdate...

а что значит: "все равно в таком формате дату хранить нельзя." ?

п.с.у меня потом идет strtotime , дата хранится в unix time stamp
 

Ralph

Дикий столяр
:)

-~{}~ 07.01.08 00:25:

Sorry,моя большая проблема:решаю частные задачи,не вникнув в общий смысл... Все,молчу :)
 

Фанат

oncle terrible
Команда форума
Да решай на здоровье.
Только уж тогда целиком. валидацию регами даты.
потом покажешь объем кода.
 

Ralph

Дикий столяр
([0-2]?\d|3[01])\s*\.\s(0?\d|1[12])\s*\.\s([\d]{1,3]|[0-2][\d]{3})\s([01]?\d|2[0-3])\s:\s[0-5]?\d\s:\s[0-5]?\d

???

К сожалению,без учета кол-ва дней в месяцах и високосности :-(

-~{}~ 07.01.08 01:32:

((([01]?\d|2[0-8])\s\.\s0?2)|([0-2]?\9|30)\s\.\s(0?9|1[0-2])|(31\s\.\s(01|1|03|05|5|07|7|08|8|10|12)))\s\.\s

Мда,объем нехилый выходит при учете дней в месяцах :-(
 

kernel32

Новичок
Ralph, зачем так париться? Тебе же сказали: используй checkdate(), она и на високосность проверяет, и на кол-во дней в месяце... А если что, можно разбивать и делать проверку самому какими угодно изощрёнными способами. А в рег. выражении особо колбаситься не надо.
 

Ralph

Дикий столяр
Да боже мой,кто парится,я уж и забыл,просто вчера после 3 литров пива пробило на регулярки :-D Кстати,в пхп4 что то еще не встречал эту функцию
 
Сверху