2022. 9. 20. 16:02ㆍProgram/PHP
077_PHP 정규표현식 이메일 주소 유효성 검사하기
[요약]
- 정규표현식을 이용하여 이메일 주소의 패턴을 검사하는 방법에 대해 알아보자
정규표현식을 이용해 이메일 주소가 맞는지 확인하는 패턴식을 만들어보자.
이메일 주소의 @ 앞에는 아이디가 위치하며, 뒤에는 도메인 주소가 위치한다.
우선 아이디부터 패턴식을 만들어보자.
아이디는 보통 영문 대문자, 영문 소문자, 숫자, _(언더바), -(하이픈), .(닷) 등이 섞여서 위치하며
아이디 앞에는 _(언더바), -(하이픈), .(닷)이 위치하지 않는다.
-(하이픈)은 [] 안에서 간격을 의미하므로 문자로 사용하려면 앞에 \(역슬래시)를 사용한다.
[\-]
.(닷)역시 [] 밖에서 모든 문자를 의미하므로 문자로 사용하려면 앞에 \(역슬래시)를 사용한다.
\.[]
_(언더바), -(하이픈), .(닷)이 아이디 앞에 위치하지 않는 패턴식을 만들면 다음과 같다.
$pattern = '/^[^.\-_]/';
하이만 이외에도 많은 특수문자가 앞에 위치하면 안되므로
첫 글자가 영문 소문자, 영문 대문자가 위치하도록 하는편이 더 편리하다.
$pattern = '/^[a-zA-Z]{1}/';
다음은 아이디에 영문 대문자, 영문 소문자, _(언더바), -(하이픈), .(닷)을 허용하는 패턴식이다.
$pattern = '/^[a-zA-Z0-9.\-_]+/';
앞의 두가지 아이디에 관한 패턴식을 합치면 다음과 같다.
$pattern = '/^[a-zA-Z]{1}[a-zA-Z0-9.\-_]+@/';
@의 뒤에는 도메인이 위치한다. 도메인은 google.com이나 naver.com과 같이 .(닷)으로 구분된다.
.(닷)으로 구분된다. .(닷)을 기준으로 앞의 도메인은 영문 소문자, 숫자, -(하이픈)으로 구성되며, 앞과 뒤에 -(하이픈)이 위치할 수 없다.
그러므로 앞과 뒤에는 영문 소문자나 숫자가 위치하고 중간에는 하이픈이 들어갈 수 있는 패턴식을 만든다.
이 규칙을 패턴식으로 만들면 다음과 같다.
[a-z0-9]{1}[a-z0-9\-]+[a-z0-9]{1}
[a-z]{1}는 영문 소문자로 1개의 글자가 시작하는 패턴식이다.
[a-z_]+는 중간에 영문 소문자와 _(하이픈)을 포함하여 1개 이상 입력을 허용하는 패턴식이다.
[a-z]{1}는 마지막 글자가 영문 소문자로 끝나는 패턴식이다.
.도메인 주소의 .(닷)을 붙여주면 식은 다음과 같다. [] 밖에서는 모든 문자를 의미하는 기호로 사용되므로
\(역슬래시)를 앞에 붙여서 사용한다.
[a-z0-9]{1}[a-z0-9\-]+[a-z0-9]{1}$\.
마지막으로 도메인의 .(닷)다음에 위치하는 문자는 com, io, kr, ac, org, co.kr 등 매우 다양하므로 영문 처음과 끝에 .(닷)이 위치하지 않는 식으로 만들고 그 외는 영문 소문자가 위치하도록 만든다.
(([a-z]{1}[a-z.]+[a-z]{1})|([a-z]+))$
앞에서 만든 패턴식을 모두 합치면 다음과 같다.
'/^[a-zA-Z]{1}[a-zA-Z0-9.\-_]+@[a-z0-9]{1}[a-z0-9\-]+[a-z0-9]{1}\.(([a-z]{1}[a-z.]+[a-z]{1}|([a-z]+))$/';
다음은 위의 패턴을 사용하여 이메일 유효성을 검사하는 예제이다.
[예제: 79_regExp.php ]
<?php
// 패턴 대입
$pattern = '/^[a-zA-Z]{1}[a-zA-Z0-9.\-_]+@[a-z0-9]{1}[a-z0-9\-]+[a-z0-9]{1}\.(([a-z]{1}[a-z.]+[a-z]{1})|([a-z]+))$/';
$str = 'playdaddy@gmail.com';
if(preg_match($pattern, $str, $matches)) {
echo "값 {$str}은(는) 이메일 주소 유효성에 적합한 값입니다.";
echo "<pre>";
var_dump($matches);
echo "</pre>";
} else {
echo "이메일 주소 유효성에 맞지 않습니다.";
}
<?
실행결과
초보자를 위한 PHP 200제
김태영 지음 | 정보문화사
'Program > PHP' 카테고리의 다른 글
[PHP] filter_Var() 함수로 URL 유효성 검사하기 (0) | 2022.09.20 |
---|---|
[PHP] filter_Var() 함수로 이메일 유효성 검사하기 (0) | 2022.09.20 |
[PHP] 정규표현식으로 휴대전화번호 유효성 검사하기 (1) | 2022.09.19 |
[PHP] 정규표현식 숫자 검사 (0) | 2022.09.19 |
[PHP] 정규표현식 영문 소문자 검사 (1) | 2022.09.19 |