[PHP] 정규표현식 이메일 주소 유효성 검사하기

2022. 9. 20. 16:02Program/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제
김태영 지음 | 정보문화사