В регулярках не силен. Прошу помочь в составлении.
Вот что есть
Формат даты 04.12.1983 - 4 декабря 1983
Регулярка не моя! Нашол в инете.
<?php
if(!preg_match('(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d', $date))
$err[] = 'Не корректно введена дата';
?>
Спустя 11 минут, 19 секунд (23.07.2012 - 12:54) Winston написал(а):
Регулярка корректная, нужно лишь ограничители добавить
if(!preg_match('#^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$#', $date))
Спустя 1 минута, 36 секунд (23.07.2012 - 12:56) Kuliev написал(а):
Цитата (Winston @ 23.07.2012 - 13:54) |
Регулярка корректная, нужно лишь ограничители добавитьif(!preg_match('#(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d#', $date)) |
Спасибо, щас проверю.
Спустя 3 минуты, 53 секунды (23.07.2012 - 13:00) Kuliev написал(а):
Winston
Все работает. Вопрос: я так понимаю [- /.] вот в этом месте находится разделитель. Т.е. можно написать так 04-12-1983 или 04/12/1983
Все работает. Вопрос: я так понимаю [- /.] вот в этом месте находится разделитель. Т.е. можно написать так 04-12-1983 или 04/12/1983
Спустя 4 минуты, 27 секунд (23.07.2012 - 13:04) Winston написал(а):
Kuliev
Да, там 4 вида разделителей, то есть можно писать
04-12-1983
04 12 1983
04/12/1983
04.12.1983
Но что бы не допустить разных разделителей например 04.12-1983, нужно изменить вот так регулярку
Да, там 4 вида разделителей, то есть можно писать
04-12-1983
04 12 1983
04/12/1983
04.12.1983
Но что бы не допустить разных разделителей например 04.12-1983, нужно изменить вот так регулярку
if(!preg_match('#^(0[1-9]|[12][0-9]|3[01])([- /.])(0[1-9]|1[012])\\2(19|20)\d\d$#', $date))
Спустя 2 минуты, 59 секунд (23.07.2012 - 13:07) Placido написал(а):
А если введут 31.02.2012? Лучше воспользоваться функцией checkdate()
$arr = preg_split('#[./-]#', $date);
echo count($arr) === 3 ? (checkdate($arr[1], $arr[0], $arr[2]) ? 'Дата корректна' : 'Дата некорректна') : 'Дата некорректна';
Спустя 42 секунды (23.07.2012 - 13:08) Kuliev написал(а):
Цитата (Winston @ 23.07.2012 - 14:04) |
Kuliev Да, там 4 вида разделителей, то есть можно писать 04-12-1983 04 12 1983 04/12/1983 04.12.1983 Но что бы не допустить разных разделителей например 04.12-1983, нужно изменить вот так регулярку if(!preg_match('#(0[1-9]|[12][0-9]|3[01])([- /.])(0[1-9]|1[012])\\2(19|20)\d\d#', $date)) |
А если чтобы только одни точки были 04.12.1983
Спустя 6 минут, 40 секунд (23.07.2012 - 13:15) Winston написал(а):
Чтобы только точки, то так
if(!preg_match('#^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d$#', $date))
Цитата (Placido @ 23.07.2012 - 13:07) |
А если введут 31.02.2012? |
Тогда воспользоваться вот такой регуляркой http://phpforum.ru/index.php?showtopic=0&v...dpost&p=1487044 :D (она еще и високосные года учитывает)
Спустя 1 минута, 25 секунд (23.07.2012 - 13:16) Kuliev написал(а):
Цитата (Winston @ 23.07.2012 - 14:15) | ||
Чтобы только точки, то такif(!preg_match('#^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d$#', $date))
Тогда воспользоваться вот такой регуляркой http://phpforum.ru/index.php?showtopic=0&v...dpost&p=1487044 :D (она еще и високосные года учитывает) |
Спасибооо.
Спустя 4 минуты, 58 секунд (23.07.2012 - 13:21) Placido написал(а):
Цитата (Winston @ 23.07.2012 - 13:15) | ||
Тогда воспользоваться вот такой регуляркой http://phpforum.ru/index.php?showtopic=0&v...dpost&p=1487044 ![]() |
А зачем такие велосипеды? checkdate() тоже високосные года учитывает.
Спустя 4 минуты, 46 секунд (23.07.2012 - 13:26) Winston написал(а):
Цитата (Placido @ 23.07.2012 - 13:21) |
А зачем такие велосипеды? checkdate() тоже високосные года учитывает |
Где то я видел, что с ней бывают какие то проблемы... Но точно не уверен какие...