웹 개발에서 사용자가 입력한 이메일 주소가 올바른 형식인지 확인하는 것은 매우 중요한 작업입니다. 잘못된 이메일 주소가 데이터베이스에 저장되면 회원가입, 뉴스레터 발송 등 다양한 기능에 문제가 생길 수 있습니다.
이 글에서는 PHP의 정규 표현식(Regular Expression)과 내장 함수를 활용해 이메일 주소를 검증하는 대표적인 두 가지 방법을 소개합니다.
방법 1: preg_match() 함수와 정규 표현식 활용
preg_match() 함수는 정규 표현식 패턴을 기준으로 문자열을 검사하여, 패턴과 일치하면 1을, 일치하지 않으면 0을 반환합니다. 이를 활용하면 원하는 형식의 이메일 주소인지 정밀하게 확인할 수 있습니다.
예제 코드
<?php
function checkemail($str) {
return (!preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
}
if(!checkemail("alex@tutorialspoint.com")){
echo "Invalid email address.";
}
else{
echo "Valid email address.";
}
?>실행 결과
Valid email address.
위 예제에서는 preg_match() 함수로 문자열이 이메일 패턴과 일치하는지 검사하고, PHP 삼항 연산자(ternary operator)를 사용해 검사 결과에 따라 TRUE 또는 FALSE 값을 반환하도록 구성했습니다. 정규 표현식 끝에 붙은 i 플래그는 대소문자를 구분하지 않도록 하며, x 플래그는 패턴 내 공백을 무시해 가독성을 높여줍니다.
방법 2: filter_var() 함수 활용
두 번째 방법은 PHP에서 기본 제공하는 filter_var() 함수를 사용하는 것입니다. FILTER_VALIDATE_EMAIL 상수를 함께 전달하면 해당 문자열이 RFC 규격에 맞는 이메일 형식인지 자동으로 검사해 줍니다. 별도의 정규 표현식을 작성할 필요가 없어 코드가 간결하고 유지보수가 쉬운 장점이 있습니다.
예제 코드
<?php
$email = "pattrick@tutorialspoint.com";
// 이메일 유효성 검사
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo("$email is a valid email address");
}
else{
echo("$email is not a valid email address");
}
?>실행 결과
pattrick@tutorialspoint.com is a valid email address
두 방법의 비교 및 추천
정규 표현식을 직접 작성하는 방법은 검증 규칙을 세부적으로 조정할 수 있다는 장점이 있지만, 이메일 표준(RFC 5322)을 완벽히 반영하기 어렵고 코드가 복잡해질 수 있습니다. 반면 filter_var() 방식은 PHP 내부에서 검증 로직을 관리해 주기 때문에 대부분의 경우 더 안전하고 권장되는 방법입니다. 특별한 커스텀 규칙이 필요하지 않다면 filter_var() 사용을 추천합니다.