まとめ:入力バリデーション
CoddyのPHPジャーニー「論理とフロー」セクションの一部 — レッスン 58/68。
チャレンジ
簡単4つの入力(メールアドレスの文字列、電話番号の文字列、最小年齢の数値、実際の年齢の数値)を受け取ります。
2つのカスタム例外クラスを作成してください:
- ベースとなる
Exceptionクラスを継承したInvalidEmailException - ベースとなる
Exceptionクラスを継承したInvalidAgeException
email、phone、minimum age、actual ageの4つのパラメータを受け取る validateUserData という関数を作成してください。この関数内では以下の処理を行います:
- メールアドレスに
@記号が含まれているか確認します。含まれていない場合は、メッセージ"Email must contain @ symbol"を持つInvalidEmailExceptionをスローします。 - 電話番号の長さがちょうど10文字であるか確認します。そうでない場合は、メッセージ
"Phone number must be 10 digits"を持つ汎用的なExceptionをスローします。 - 実際の年齢が最小年齢より低いか確認します。低い場合は、メッセージ
"User must be at least X years old"(Xは最小年齢の値)を持つInvalidAgeExceptionをスローします。 - すべてのバリデーションを通過した場合は、
"User data is valid"と出力します。
try...catch...finally ブロックを使用して、提供された入力で関数を呼び出します。以下の個別の catch ブロックを作成してください:
- 最初の
catchブロックはInvalidEmailExceptionをキャッチし、"Email error: "に続けて例外メッセージを出力します。 - 2番目の
catchブロックはInvalidAgeExceptionをキャッチし、"Age error: "に続けて例外メッセージを出力します。 - 3番目の
catchブロックを追加して、その他のExceptionをキャッチし、"Validation error: "に続けて例外メッセージを出力します。
finally ブロックでは、"Validation process completed" と出力します。
入力形式:
- 1行目:メールアドレスを表す文字列(例:
user@example.comまたはinvalidemail.com) - 2行目:電話番号を表す文字列(例:
1234567890または12345) - 3行目:最小年齢の要件を表す整数(例:
18) - 4行目:実際の年齢を表す整数(例:
25または16)
期待される出力:
- すべてのデータが有効な場合:
User data is validに続いて、新しい行にValidation process completed - メールアドレスが無効な場合:
Email error: Email must contain @ symbolに続いて、新しい行にValidation process completed - 電話番号が無効な場合:
Validation error: Phone number must be 10 digitsに続いて、新しい行にValidation process completed - 年齢が最小年齢未満の場合:
Age error: User must be at least X years old(Xは最小年齢)に続いて、新しい行にValidation process completed
自分で試してみよう
<?php
// 入力を読み込む
$email = trim(fgets(STDIN));
$phone = trim(fgets(STDIN));
$minAge = intval(fgets(STDIN));
$actualAge = intval(fgets(STDIN));
// TODO: ここでカスタム例外クラスを作成する
// InvalidEmailExceptionクラスを作成
// InvalidAgeExceptionクラスを作成
// TODO: ここでvalidateUserData関数を作成する
// 関数は4つのパラメータ(email, phone, minAge, actualAge)を受け取る必要がある
// 関数内にバリデーションロジックを実装する
// TODO: try...catch...finallyブロックを使用して関数を呼び出す
// 入力値を使用してvalidateUserDataを呼び出す
// InvalidEmailException、InvalidAgeException、および一般的なExceptionのcatchブロックを追加する
// finallyブロックを追加する
?>