Form 입력 형식 검증
입력 형식 검증
이메일 주소는 '@'문자와 '.'문자를 포함하는 유효한 이메일 주소의 형식이 따로 존재합니다.
입력 형식 검증이란 사용자가 입력한 데이터가 이러한 형식에 맞는 유효한 데이터인가를 검증하는 것입니다.
다음 예제는 앞선 예제에 이름, 이메일, 홈페이지에 대해 입력 형식 검증을 추가한 예제입니다.
예제
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameMsg = "이름을 입력해 주세요!";
} else {
$name = $_POST["name"];
// 이름의 입력 형식 검증
① if (!preg_match("/^[a-zA-Z가-힣 ]*$/", $name)) {
$nameMsg = "영문자와 한글만 가능합니다!";
}
}
...
if (empty($_POST["email"])) {
$emailMsg = "";
} else {
$email = $_POST["email"];
// 이메일의 입력 형식 검증
② if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailMsg = "이메일을 정확히 입력해 주세요!";
}
}
if (empty($_POST["website"])) {
$websiteMsg = "";
} else {
$website = $_POST["website"];
// 홈페이지 URL 주소의 입력 형식 검증
③ if (!filter_var($email, FILTER_VALIDATE_URL)) {
$websiteMsg = "홈페이지의 주소를 정확히 입력해 주세요!";
}
}
...
}
이름 입력 형식 검증
위의 예제에서 이름에는 영문자와 한글 그리고 띄어쓰기만으로 사용할 수 있도록 하고 있습니다.
이름과 같은 입력 형식 검증은 정규 표현식을 사용하여 검증할 수 있습니다.
PHP에서는 preg_match() 함수를 사용하여 정규 표현식을 이용한 검증을 할 수 있습니다.
이 함수는 전달받은 정규 표현식에 해당하는 패턴이 존재하면 true를 반환하고, 존재하지 않으면 false를 반환합니다.
예제
if (empty($_POST["name"])) {
$nameMsg = "이름을 입력해 주세요!";
} else {
$name = $_POST["name"];
// 이름의 입력 형식 검증
① if (!preg_match("/^[a-zA-Z가-힣 ]*$/", $name)) {
$nameMsg = "영문자와 한글만 가능합니다!";
}
}
①번 라인에서 사용된 정규 표현식 "/^[a-zA-Z가-힣 ]*$/"의 의미는 영문 소문자와 영문 대문자, 한글 그리고 띄어쓰기만으로 이루어진 문자열을 의미합니다.
따라서 ①번 라인에서는 변수 $name의 값이 이러한 정규 표현식에 해당하는 문자열인지를 검사하고 있습니다.
위의 예제에서 이름에 만약 영문 대소문자, 한글, 띄어쓰기 이외의 문자가 포함되면, 오류 메시지를 출력할 것입니다.
정규표현식에 대한 더 자세한 사항은 PHP 정규 표현식 수업에서 확인할 수 있습니다.
이메일과 URL 주소 입력 형식 검증
PHP에서는 이메일과 URL 주소에 대한 입력 형식 검증에 사용할 수 있는 filter_var() 함수를 제공하고 있습니다.
filter_var() 함수는 해당 변수가 전달받은 검증 필터(validate filter)에 맞는 유효한 값인지를 검사하는 함수입니다.
PHP에서 사용할 수 있는 검증 필터는 다음과 같습니다.
검증 필터 | 설명 |
---|---|
FILTER_VALIDATE_BOOLEAN | 해당 변수가 "1", "true", "on", "yes"인 경우에만 true를 반환하고, 나머지는 전부 false를 반환함. |
FILTER_VALIDATE_EMAIL | 해당 변수가 유효한 이메일 주소인지를 검증함. |
FILTER_VALIDATE_FLOAT | 해당 변수가 float 타입인지를 검증함. |
FILTER_VALIDATE_INT | 해당 변수가 int 타입인지를 검증함. |
FILTER_VALIDATE_IP | 해당 변수가 유효한 IP 주소인지를 검증함. |
FILTER_VALIDATE_MAC | 해당 변수가 유효한 MAC 주소인지를 검증함. |
FILTER_VALIDATE_REGEXP | 해당 변수를 펄 호환 정규 표현식(Perl-Compatible Regular Expression, PCRE)으로 검증함. |
FILTER_VALIDATE_URL | 해당 변수가 유효한 URL 주소인지를 검증함. |
예제
if (empty($_POST["email"])) {
$emailMsg = "";
} else {
$email = $_POST["email"];
// 이메일의 입력 형식 검증
② if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailMsg = "이메일을 정확히 입력해 주세요!";
}
}
if (empty($_POST["website"])) {
$websiteMsg = "";
} else {
$website = $_POST["website"];
// 홈페이지 URL 주소의 입력 형식 검증
③ if (!filter_var($website, FILTER_VALIDATE_URL)) {
$websiteMsg = "홈페이지의 주소를 정확히 입력해 주세요!";
}
}
②번 라인에서는 filter_var() 함수에 인수로 FILTER_VALIDATE_EMAIL 검증 필터를 전달합니다.
따라서 변수 $email에 저장된 값이 유효한 이메일 주소인가를 검증하고, 유효한 이메일 주소라면 true를 반환할 것입니다.
③번 라인에서는 filter_var() 함수에 인수로 FILTER_VALIDATE_URL 검증 필터를 전달합니다.
따라서 변수 $website에 저장된 값이 유효한 URL 주소인가를 검증하고, 유효한 URL 주소라면 true를 반환할 것입니다.