요약: 입력 유효성 검사
Coddy PHP 여정의 논리 & 흐름 섹션에 포함된 레슨 — 68개 중 58번째.
챌린지
쉬움이메일 주소 문자열, 전화번호 문자열, 최소 연령 숫자, 실제 연령 숫자의 네 가지 입력을 받게 됩니다.
두 개의 사용자 정의 예외 클래스를 생성하세요:
- 기본
Exception클래스를 상속받는InvalidEmailException - 기본
Exception클래스를 상속받는InvalidAgeException
이메일, 전화번호, 최소 연령, 실제 연령의 네 가지 매개변수를 받는 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: "뒤에 예외 메시지를 출력해야 합니다. - 두 번째
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 함수 생성
// 이 함수는 email, phone, minAge, actualAge 네 개의 매개변수를 받아야 함
// 함수 내부에 유효성 검사 로직 구현
// TODO: try...catch...finally 블록을 사용하여 함수 호출
// 입력값으로 validateUserData 호출
// InvalidEmailException, InvalidAgeException 및 일반 Exception에 대한 catch 블록 추가
// finally 블록 추가
?>