
PHPでpreg_match()を使って日付のフォーマットを簡単にチェックすることができますが、同時に日付の妥当性をチェックする形にしてみます。
よくあるのは2月31日とかの日は存在しませんよね。そういう場合、checkdate()を使って妥当性をチェックします。
/**
* 日付フォーマット検証
*
* @param string $value 日付フィールド入力値
* @return bool
*/
private function isDate($value): bool
{
if (preg_match("/^[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])$/", $value)) {
[$y, $m, $d] = explode('/', $value);
if (checkdate((int)$m, (int)$d, (int)$y)) {
return true;
}
}
return false;
}
ちな、日付チェック系の他記事はフォーマットと妥当性がひとまとめになったものが少ない感じなので、記事にしました。