웹 애플리케이션을 개발할 때 사용자로부터 입력받은 데이터(이메일, 휴대폰 번호, 아이디 등)를 안전하게 정제하고 검증하는 작업은 필수적입니다.
PHP에서는 preg_match() 함수를 통해 특정 서식과 일치하는지 체크하고, preg_replace() 함수를 사용해 불필요한 문자나 특수문자를 제거하는 방식으로 데이터를 필터링합니다.
이번 포스팅에서는 실무 프로젝트에서 백엔드 데이터를 다룰 때 가장 많이 쓰이는 PHP 필수 정규표현식(Regex) 유틸리티 함수 7가지 모음을 공유합니다. 아래 가이드 내용을 마우스로 드래그하여 가독성 높은 반전 효과를 직접 확인해 보세요!
-
preg_match: 일치 여부를 판단하여 대상을 검증(Validation)할 때 주로 사용합니다.-
preg_replace: 조건에 맞는 문자를 치환하거나 원치 않는 패턴을 제외(Filtering)할 때 유용합니다.- 데이터를 처리하기 전, 모든 공백을 선행적으로 제거(
remove_blank)하면 패턴 매칭의 정밀도가 훨씬 올라갑니다.
1. PHP 실무형 정규식 유틸리티 클래스 소스코드
실제 백엔드 프로젝트나 프레임워크 환경에서 공통 라이브러리(Helper 클래스) 형태로 묶어서 곧바로 복사해 활용할 수 있는 최적화된 PHP 소스코드 구성입니다.
<?php
class RegexHelper {
// [정규식] 이메일 형식 유효성 체크
public static function verify_email($email) {
return preg_match("/([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/", $email) ? TRUE : FALSE;
}
// [정규식] 휴대폰 번호 유효성 체크 (대시 제거 후 숫자 서식 검사)
public static function verify_tel($tel) {
$tel = preg_replace("/[^0-9]/", "", $tel); // 모든 대시(-) 및 문자 제거
return preg_match("/^01[0-9]{8,9}$/", $tel) ? TRUE : FALSE;
}
// [정규식] 이메일 주소 구성 문자 외 모두 제거 (소문자 변환)
public static function replace_email($email) {
$email = self::remove_blank($email);
return preg_replace("/[^a-z0-9-_.@]/", "", strtolower($email));
}
// [정규식] 휴대폰 번호 숫자 및 하이픈(-) 외 나머지 제거
public static function replace_tel($tel) {
$tel = self::remove_blank($tel);
return preg_replace("/[^0-9-]/", "", $tel);
}
// [정규식] 모든 종류의 공백(\s) 문자를 깨끗이 제거
public static function remove_blank($string) {
return preg_replace("/\s+/", "", $string);
}
// [정규식] 해킹 위험이 있는 모든 특수문자 제거
public static function replace_init($string) {
$string = self::remove_blank($string);
return preg_replace("/[ #\&\+\-%@=\/\\\:;,\.'\"\^`~\_|\!\?\*\$#<>()\[\]\{\}]/i", "", $string);
}
// [정규식] 영문 알파벳/숫자만 남기기 (선택인자 전달 시 하이픈까지 포함 가능)
public static function replace_alnum($string, $arg = NULL) {
$string = self::remove_blank($string);
if (!is_null($arg)) {
return preg_replace("/[^A-Za-z0-9-]/", "", $string);
} else {
return preg_replace("/[^A-Za-z0-9]/", "", $string);
}
}
}
?>
2. 각 함수별 주요 작동 원리 톺아보기
① 이메일 및 연락처 검증
verify_email 함수는 특수 전역 패턴 기호를 매핑하여 도메인의 마침표 구조와 대괄호 아이피 패턴까지 오차 없이 체크합니다. verify_tel 함수는 데이터베이스 유입 전 단계에서 하이픈을 사전에 탈락시킨 뒤 순수 010, 011로 시작하는 10~11자리 숫자 구조만 정상 승인합니다.
② 화이트리스트 방식의 문자열 정제
replace_alnum 내부의 정규식 패턴인 [^A-Za-z0-9]에서 대괄호 안의 맨 첫 글자인 꺾쇠(^) 부호는 부정(NOT)을 의미합니다. 즉, 영문자와 숫자 기호를 제외한 모든 문자(한글, 특수문자 등)를 전부 공백("") 처리하여 완벽히 여과시킵니다.
3. 공식 PHP 정규식 레퍼런스 가이드
PHP 공식 매뉴얼에서 제공하는 PCRE 정규표현식 함수의 매칭 패턴 명세 및 플래그 옵션에 대한 상세한 가이드는 아래 공식 테크니컬 개발자 문서 버튼을 통해 정확하게 점검해 보실 수 있습니다.
4. 맺음말
회원가입 폼이나 검색창 인풋을 가공하지 않고 데이터베이스나 시스템 명령어로 흘려보내면 SQL Injection이나 사이트 에러의 원인이 될 수 있습니다. 오늘 소개해 드린 검증/치환 스크립트 모음을 백엔드 API 유효성 검사 단계에 도입하여 더욱 완성도 높고 견고한 PHP 애플리케이션을 구축해 보세요!