LoginSignup
1
1

More than 1 year has passed since last update.

PHP <input type=”date”>のバリデーションの方法

Last updated at Posted at 2022-11-26

概要

会社情報を登録して、表示するメモアプリを作成していたのですが、<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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1