Простейшая регулярка

krafty

new Exception
Простейшая регулярка

Сегодня первый раз решил прибегнуть к помощи регулярных выражений. Вобщем нужно проверить правильность формата даты ГГГГ-ММ-ДД.
Я делаю так:
$str='2005-9-02';
preg_match('/[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}/',$str)
Проблема: неправильно работает квантификатор повторения при превышении установленного количества символов, т.е. 20005-09-02 - правильный формат, а 200-09-02 - неправильный.

И еще интересует смежный вопрос: возможно ли на PCRE реализовать полную проверку формата даты с учетом количества дней в опр. месяце, учет высокосных годов?

P.S. вместо [0-9] пробывал \\d - тоже не работает
 

krafty

new Exception
{4,4} - без изменений уже пробывал

>можно
но сложно? особенно с учетом, что я полчаса назад начал юзать
 

python

Новичок
подумай еще раз, в чём ошибка? разве "20005-09-02" не подходит под шаблон? а "ыфвафывафывафа0000-09-09" подходит?

не знаю что конкретно ты хочешь, но может '/^[0-9]{4,4}-[0-9]{1,2}-[0-9]{1,2}$/'?
 

python

Новичок
согласен, это я на первый вопрос отвечаю, а второй кстати интересный - я подумаю :)
 

Ринат

Новичок
'/^[0-9]{4,4}-[0-9]{1,2}-[0-9]{1,2}$/'?
ГГГГ-ММ-ДД = ГГГГ-М-Д
и прокатит естественно вариант 0000-99-00

-~{}~ 02.09.05 15:01:

Фанат быстрее =) ...
 

krafty

new Exception
python
по-моему задача описана конкретно!
и как раз все наоборот
20005-09-02 подходит
ыфвафывафывафа0000-09-09 - не подходит


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

Фанат

oncle terrible
Команда форума
подсказка
1[0-2]|0[1-9]

хотя, конечно, [m]checkdate[/m] всё равно точнее =)
 

krafty

new Exception
Ринат, так работает!

-~{}~ 02.09.05 17:11:

Фанат, мне кажется, что и легче так.
сначала проверяем регуляркой, а потом checkdate
 

Ринат

Новичок
как так
формат какой нужен был ГГГГ-ММ-ДД. или пофиг, ибо такой тоже прокатит ГГГГ-М-Д,
ссылка на функцию клевая, но реги на досуге конечно надо... (и мне тоже =)
комменты к функции тоже почитать можно...
 

Ринат

Новичок
Вобщем нужно проверить правильность формата даты ГГГГ-ММ-ДД.
ну значит я читать не умею =)
кстати по функции, тут год первым быть должен
в функции
checkdate ( int month, int day, int year )
 

krafty

new Exception
знаю. надо сначала строку разбить с пом. explode(), а потом исп-ть checkdate
 

Ринат

Новичок
зачем столько телодвижений =)
имхо попробовать напистаь регулярку и проверять
 
Сверху