Menu
CoddyTech

回顾:输入验证

本课属于 Coddy PHP 学习旅程的“逻辑与流程”单元。第 58 课,共 68 课。

challenge icon

挑战

简单

你会收到 4 个输入:一个表示电子邮件地址的字符串、一个表示电话号码的字符串、一个表示最低年龄的数字,以及一个表示实际年龄的数字。

创建两个自定义异常类:

  • 创建 InvalidEmailException,使其继承基类 Exception
  • 创建 InvalidAgeException,使其继承基类 Exception

创建一个名为 validateUserData 的函数,该函数接受 4 个参数:电子邮件、电话号码、最低年龄和实际年龄。在这个函数中:

  • 检查电子邮件是否包含符号 @。如果不包含,则抛出一个 InvalidEmailException,并使用消息 "Email must contain @ symbol"
  • 检查电话号码的长度是否正好为 10 个字符。如果不是,则抛出一个通用的 Exception,并使用消息 "Phone number must be 10 digits"
  • 检查实际年龄是否小于最低年龄。如果是,则抛出一个 InvalidAgeException,并使用消息 "User must be at least X years old"(其中 X 是最低年龄的值)
  • 如果所有验证都通过,则打印 "User data is valid"

使用 try...catch...finally 代码块,传入提供的输入来调用这个函数。创建两个单独的 catch 代码块:

  • 第一个 catch 代码块应捕获 InvalidEmailException,并打印 "Email error: ",后面跟着异常消息
  • 第二个 catch 代码块应捕获 InvalidAgeException,并打印 "Age error: ",后面跟着异常消息
  • 再添加第三个 catch 代码块,捕获其他任何 Exception,并打印 "Validation error: ",后面跟着异常消息

在 finally 代码块中,打印 "Validation process completed"。

输入格式:

  • 第一行:表示电子邮件地址的字符串(例如:user@example.com 或 invalidemail.com)
  • 第二行:表示电话号码的字符串(例如:1234567890 或 12345)
  • 第三行:表示最低年龄要求的整数(例如:18)
  • 第四行:表示实际年龄的整数(例如: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 代码块

?>

逻辑与流程中的所有课

自己练习: PHP 在线编译器