Menu
Coddy logo textTech

まとめ:入力バリデーション

CoddyのPHPジャーニー「論理とフロー」セクションの一部 — レッスン 58/68。

challenge icon

チャレンジ

簡単

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ブロックを追加する

?>

論理とフローのすべてのレッスン