PHP で、日時のフォーマットをチェックする方法

まず、yyyy/mm/dd HH:nn (秒は省略;00秒とみなす)のフォーマットを表す正規表現は、


^(\d\d)\/(\d\d)\/(\d\d\d\d) (\d\d):(\d\d)$

となる。

preg_match は、Perl 形式のでの正規表現を処理するものであり、以下の例だと $datetime でマッチした順から $m 配列に


$m[1] = 1<br />
$m[2] = 28<br />
$m[3] = 2007<br />
$m[4] = 12<br />
$m[5] = 34

という値が自動的に入る。なので、mktime で $m[1]~$m[5] をひとつひとつ並び替えて再構築して日時を生成してみて、チェックしている。ちなみに mktime のパラメータは mktime(HH, nn, ss, mm, dd, yyyy)。だから /^(\d\d)\/(\d\d)\/(\d\d\d\d) (\d\d):(\d\d)$/ の正規表現から日時を再構築するには、mktime($m[4], $m[5], 0, $m[1], $m[2], $m[3]); となる。

<?php $datetime = '01/28/2007 12:34'; if (isset($datetime) && (trim($datetime) != '')) { // check the date format if (!preg_match('/^(\d\d)\/(\d\d)\/(\d\d\d\d) (\d\d):(\d\d)$/', $datetime, $m)) { print 'Date and time should be in the format "mm/dd/yyyy HH:nn"'; } else { <pre>// make sure the date provided is a validate date if (!mktime($m[4], $m[5], 0, $m[1], $m[2], $m[3])) { print 'Please enter a valid date and time'; } } } ?>