フォーム欄にユーザが入力を行う際、作り手の意図に沿わない入力が行われる可能性があります。
そこで、作り手の意図に沿わない入力が行われた際に、アラートメッセージを表示し、処理が進まないようにする必要があります。(バリデーションと言います。)
今回は、日付の入力に関するバリデーションを学びましたので、アウトプットします。
エラーとなる条件
今回、エラーとなる条件は以下のとおり定めました。
- 空欄の場合、エラーとする。
- 日付の形式(YYYY-MM-DD)でない場合にエラーとする。
- 例えば、文字列が入力された場合など
- ありえない日付の場合にエラーとする。
- 例えば、2022-02-30など
使用する関数
checkdate()
- 日付が正しいかチェックしてくれる。
- 引数を(月,日,年)の順番で指定する必要がある点に留意。
explode()
- 特定の文字列によって、文字列を分割して、配列として格納してくれる。
サンプルコード
以下は、ユーザが会社の創業日(establishment_date)を入力し、連想配列$company['establishment_date']に格納されているとしている。
<?php function validate($company) { $errors = []; // checkdate()を使用するため、'-'で日付を区切って配列として格納 // 例)2020-10-8 -> 2020 10 8 に分割する $dates = explode('-', $company['establishment_date']); // 空欄の場合エラーとする if (!strlen($company['establishment_date'])) { $errors['establishment_date'] = '設立日を入力してください'; // $datesの配列の数が3でない場合(つまり、YYYY-MM-DDではない場合)にエラーとする } elseif (count($dates) !== 3) { $errors['establishment_date'] = '設立日を正しい形式で入力してください'; // ありえない日付のときに、エラーとする // checkdateの引数は(月,日,年)とする必要があるため、以下のようにする } elseif (!checkdate($dates[1], $dates[2], $dates[0])) { $errors['establishment_date'] = '設立日を正しい日付で入力してください'; } return $errors; }