PHPで日付フォーマットのチェック。
以外とよく聞かれる、日付形式「yyyy-mm-dd hh:ii:ss」が正しいかチェックする方法。
<?php function checkDatetimeFormat($datetime){ return $datetime === date("Y-m-d H:i:s", strtotime($datetime)); }
正規表現で書く人が多いが、こちらの方が書くのも楽だし可読性もよい。
またdate()のフォーマットを変えれば、別の形式の場合も簡単にチェックできる。
正規表現だと
<?php function checkDatetimeFormat($datetime){ return preg_match('/^(?P<year>[0-9]{4})\-(?P<month>[0-9]{2})-(?P<day>[0-9]{2}) ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/', $datetime, $m) === 1 && checkdate($m['month'] , $m['day'] , $m['year']); }
ポイントは正規表現だけではフォーマットのチェックはできないので、checkdate()を実行する必要がある事。
正規表現で、もう少し精密にチェックする事もできるが、閏年までチェックするのは多分不可能。
上の例だと、checkdate()を通さなくても、正しい日付かどうかもチェックできる。
どの言語でも、日付のチェックは組み込みの関数を使うほうが無難。