사용자 입력 데이터를 받을 때마다 직접 정규표현식을 작성하고 있지는 않을까. 많은 개발자들이 각 데이터 타입마다 일일이 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.comtest@.com
FILTER_VALIDATE_URLURL 주소https://example.comhtp://example.com
FILTER_VALIDATE_IPIP 주소 (IPv4/IPv6)192.168.1.1256.1.1.1
FILTER_VALIDATE_INT정수42, -53.14, abc
FILTER_VALIDATE_FLOAT실수3.14, -2.5abc
FILTER_VALIDATE_BOOLEAN불린값true, "1", "yes""maybe"
FILTER_VALIDATE_DOMAIN도메인명example.comexample.c
FILTER_VALIDATE_MACMAC 주소AA:BB:CC:DD:EE:FFAA:BB:CC:DD:EE
FILTER_SANITIZE_EMAIL이메일 정제user@example.comuser@example.com
FILTER_SANITIZE_URLURL 정제https://example.comhttps://exam ple.com
FILTER_SANITIZE_NUMBER_INT정수 추출42 ("abc42def" → 42)안전 반환 (숫자 없음)
FILTER_SANITIZE_NUMBER_FLOAT실수 추출3.14 ("3.14abc" → 3.14)안전 반환 (숫자 없음)
FILTER_SANITIZE_STRINGHTML 태그 제거hello ("<script>hello" → hello)안전 반환
FILTER_SANITIZE_FULL_SPECIAL_CHARS특수문자 이스케이프&lt; ("
이 포스트가 도움이 되었나요?
0
카테고리 연관글
PHP 에서 GET,POST 변수처리 보안
PHP의 경우 변수가 정말 개방적이다. 때론 개방적이다 못해 해커로 부터 공격당하기 좋은 환경또한 제공해 준다. 과거 프로그램들을 보면 GET, POST 를 변수화 시켜서 사용하거나 php.ini 에서 변수화 설정을 통해 사용하기도 했었다. 이러한 방법은 편리하긴 하나 보안의 취약점이기도 하다. 현재와서는 함수 또는 클래스화 하여 처리하고 있지만 PHP만 ···
MySQL ERROR 1071: Specified key was too long - max_key_length 초과 완벽 해결
마이그레이션이나 테이블 생성 시 갑자기 나타나는 &#039;Specified key was too long&#039; 에러를 경험해봤을까? 인덱스나 기본키를 설정하려는데 컬럼 길이가 너무 길다며 생성이 거부되는 상황이다. 다만 대부분의 개발자들은 이 제한이 정확히 어디서 비롯되었는지, 왜 필요한지, 어떻게 해결해야 하는지 모른 채 컬럼 길이를 무작정 줄이거나 인덱스를 포기해&middot;&middot;&middot;
[PHP] index.php 죽이기
웹을 개발하다보면 index.php 죽이기라는 말을 많이들 들어봤을 것이다. 처음 index.php 죽이기를 접했을 시 이게 무슨 말이지? 하였지만 막상 사용하고 보니 이해가 되었다. index.php 란 쉽게 말해 말 그대로 index.php 자체를 없애고 내부적으로는 index.php 에서 모든걸 처리한다는 뜻이다. 그런데 말입니다. index.php···
PHP setcookie() 실패하는 이유 5가지 - headers already sent 부터 SameSite까지 완벽 해결
쿠키를 설정하는 건 간단해 보인다. setcookie() 함수 한 줄이면 끝이니까. 다만 대부분의 개발자들은 쿠키가 제대로 저장되지 않는 상황을 겪으면서 막연히 에러 메시지나 구글링에만 의존한다. 정작 쿠키가 왜 작동하지 않는지, 어떤 조건이 필요한지는 모른 채로.이번에는 PHP에서 setcookie()가 실패하는 가장 흔한 5가지 원인을 정확히 파악하고,&middot;&middot;&middot;
웹서버 운영 - Centos 에서 yum을 이용하여 MYSQL 을 설치해보자
MYSQL의 경우 웹서버 운영시 DB연결을 위해서 반드시 필요한 모듈로 이번편에서는 설치에대해서만 간단하게 알아보고 설정에 대해서는 추후 다시 알아보도록 하자. 설치의 경우 yum을 이용하여 설치 가능하나 Centos 7에서는 mysql 이 아닌 mariadb 로 설치가 되는점 참고바란다. mariadb에 대해 자세히 알아보고 싶다면 아래 블로그를 참고하기···
Comment
등록된 댓글이 없습니다.
REDINFO Since 2014
webmaster@redinfo.co.kr
Copyright © Redinfo All Rights Reserved