回顾:输入验证
本课属于 Coddy PHP 学习旅程的“逻辑与流程”单元。第 58 课,共 68 课。
挑战
简单你会收到 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 在线编译器