Проверка правильности ввода пользователем даты и времени

  • Автор темы Автор темы ElenaNF
  • Дата начала Дата начала

ElenaNF

Новичок
Проверка правильности ввода пользователем даты и времени

Добрый день. У меня на форме есть два окна ввода: Дата и Время. Как проверить, правильная ли дата и формат даты?
 
я так понимаю форма я так смогу проверить, а корректность даты? т.е.чтобы не было 40.01.2000
 
ElenaNF
для того что бы определить правильно или нет проверь свою же строку "40.01.2000" этой регуляркой.
 
проверка этой регуляркой всегда выдает ошибку, даже на правильных дата, что не так?

-~{}~ 11.07.06 13:58:

а checkdate не проверяет формат ввода.
 
PHP:
$date = '40.01.2000';
var_dump(strtotime($date) !== FALSE);
// bool(false)
$date = '30.01.2000';
var_dump(strtotime($date) !== FALSE);
// bool(true)

-~{}~ 11.07.06 14:45:

> '/[0-9]{1,2}.[0-9]{1,2}.[0-9]{4}/' - это правильно?
Не правильно.
Во-первых, нужно явно заякорить шаблон, т.е. ~^...$~.
Во-вторых экранировать точки.
Затем описать формат - '~^0?(\d|[0-2]\d|3[0-2])\.0?(\d|1[0-2])\.(\d{4})$~
Запускаем:
PHP:
$string = '31.1.2000';
function elena_checkdate($string)
{
 $result = preg_match( '~^0?(\d|[0-2]\d|3[0-2])\.0?(\d|1[0-2])\.(\d{4})$~',$string,$matches);
// var_dump($result,$matches);
 return !!$result;
}
var_dump(elena_checkdate('30.12.2000')); // true
var_dump(elena_checkdate('40.12.2000')); // false
 
Фанат
Смысл дошел, но я не понимаю почему не нужно проверять. Ведь могут ввести дату "Фанат", и нужно вывести сообщение о том что дата введена не верная. Если формат обязательно должен быть фиксированным - регулярным выражением, а если он не важен - strtotime.
 
WP
PHP:
<?php

function elena_checkdate($string) {
	return (bool)preg_match( '~^0?(\d|[0-2]\d|3[0-2])\.0?(\d|1[0-2])\.(\d{4})$~',$string);
}
var_dump(elena_checkdate('29.02.2006')); // true
var_dump(elena_checkdate('31.06.2006')); // true

var_dump(strtotime('29.02.2006')!==false); // true
var_dump(strtotime('31.06.2006')!==false); // true

var_dump(checkdate(02, 29, 2006)); // false
var_dump(checkdate(06, 31, 2006)); // false

?>
 
Splurov
А где strtotime?

-~{}~ 11.07.06 16:41:

p.s. я же не зря взял в скобки части выражения, можно их скормить checkdate.
 
чтобы скормить checkdate, НЕ НУЖЕН заумный рег.
достаточно примитивного експлода.
 
Сверху