사용자 입력 데이터를 받을 때마다 직접 정규표현식을 작성하고 있지는 않을까. 많은 개발자들이 각 데이터 타입마다 일일이 preg_match()를 짜거나, 검증 로직을 중복해서 만든다. 다만 PHP에는 이미 내장된 filter_var() 함수가 있어서 이메일, URL, IP, 정수, 실수 등 대부분의 타입을 한 줄로 검증할 수 있다는 사실을 모르는 경우가 많다. 이번에는 filter_var()의 정확한 사용법과 각 필터의 동작 원리, 실무에서 자주 마주치는 검증 사례를 완벽하게 정리해서 소개하겠다.
1단계. filter_var() 기초 이해하기
filter_var()는 주어진 변수를 지정한 필터로 검증하거나 변환하는 내장 함수다. 반환값은 필터를 통과했으면 변환된 데이터, 실패했으면 false를 돌려준다.
// 기본 문법
filter_var($variable, $filter, $options);
// 예시: 이메일 검증
$email = "user@example.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "유효한 이메일";
} else {
echo "유효하지 않은 이메일";
}
filter_var()의 강점은 정규표현식 없이 선언적으로 쓸 수 있다는 것. 코드를 읽기만 해도 어떤 검증인지 바로 알 수 있다.
2단계. 자주 쓰는 필터 14가지 정리
filter_var()에서 제공하는 필터는 50개 이상이지만, 실무에서 대부분 다음 14가지만 쓴다.
| 필터 | 용도 | 통과 예시 | 실패 예시 |
|---|---|---|---|
| FILTER_VALIDATE_EMAIL | 이메일 주소 | test@example.com | test@.com |
| FILTER_VALIDATE_URL | URL 주소 | https://example.com | htp://example.com |
| FILTER_VALIDATE_IP | IP 주소 (IPv4/IPv6) | 192.168.1.1 | 256.1.1.1 |
| FILTER_VALIDATE_INT | 정수 | 42, -5 | 3.14, abc |
| FILTER_VALIDATE_FLOAT | 실수 | 3.14, -2.5 | abc |
| FILTER_VALIDATE_BOOLEAN | 불린값 | true, "1", "yes" | "maybe" |
| FILTER_VALIDATE_DOMAIN | 도메인명 | example.com | example.c |
| FILTER_VALIDATE_MAC | MAC 주소 | AA:BB:CC:DD:EE:FF | AA:BB:CC:DD:EE |
| FILTER_SANITIZE_EMAIL | 이메일 정제 | user@example.com | user@hello world";
// HTML 태그 제거
$clean_string = filter_var($user_input, FILTER_SANITIZE_STRING);
echo $clean_string; // "hello world"
// URL에서 안전하지 않은 문자 제거
$dirty_url = "https://exam ple.com/path?q=
REDINFO
Since 2014
webmaster@redinfo.co.kr
Copyright © Redinfo All Rights Reserved
|