概要
会社情報を登録して、表示するメモアプリを作成していたのですが、<input type="date">
のバリデーションがめんどくさかったので、残しておこうと思います。
バリデーションで確認したい事 2つ
1.日付が正しい形式で入力されているか?を確認する
yyyy-mm-dd の形式で入力がされているかどうかを確認する。
日付以外の文章などが入力されている場合はエラーを表示するようにする。
2.存在する日付かどうか?を確認する。
2022年の17月65日みたいな、ありえない日付が入力されている場合はエラーを表示する。
ユーザーが入力をするフォーム
<form action="index.php" method="POST">
<div>
<label for="date">設立日</label>
<input type="date" id="date" name="date">
</div>
</from>
使用した処理
$dates = explode('-', $date);
if (count($dates) !== 3) {
$errors['date'] = '日付を正しい形式で入力してください';
} elseif (!checkdate($dates[1], $dates[2], $dates[0])) {
$errors['date'] = '日付を正しい日付で入力してください';
}
$date
ユーザーが入力した日付
$dates
ユーザーが入力した値を、年、月、日にの3つに分けたもの
手順
$date
を3つに分割して、$dates変数に格納する。
explode関数を使用して、日付を3つに分割する。
yyyy-mm-dd → yyyyとmmとdd
$datesに格納
$date = [
'yyyy',
'mm',
'dd'
]
count関数で形式を確認する
yyyy-mm-dd以外であれば、$errorsにエラーメッセージを入れる。
文章などが入っていた場合は、"-"で分割ができないためエラーになる。
※参考に関数についてのドキュメント記載
checkdateでありえない日付を確認する
存在しない日付であれば、$errorsにエラーメッセージを入れる。
checkdateのパラメータは(月,日,年)の順番で入れてください。
おわり
ある程度のバリデーションに関しては、HTMLのfromに備わっていますが、万が一を考えての処理になります。
参考
独学エンジニア
StackOverflow
PHP公式ドキュメント explode
PHP公式ドキュメント checkdate