まず、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
$m[2] = 28
$m[3] = 2007
$m[4] = 12
$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 {
// 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';
}
}
}
?>
トラックバック URL:
https://perltips.twinkle.cc/trackback/166