본문 바로가기
  • AI (Artificial Intelligence)
Programming/PHP

PHP 이메일 주소 유효성 체크하기

by 로샤스 2018. 1. 15.

PHP나 Javascript 에서 예전에는 보통 정규식을 사용해서 이메일 주소를 검증 해 왔었다.



자바스크립트에선 

var format = /([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; var email = 'hcpark@email.com'; if (email.search(format) != -1) {
return true; //올바른 포맷 형식
}

이렇게 사용해왔고,


PHP 에서는 


if(!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})(\]?)$/",$_GET['email'])){
echo '이메일주소 형식 오류';
}

이렇게 사용을 해왔다.


인터넷에서 이메일 체크 정규식 으로 자료를 찾아보면, 다양한 정규식 패턴들을 볼수가 있다.


패턴에 따라 체크가능 범위가 달라지기 때문에 간혹 뜻하지 못한 에러?를 만나기도 한다.


address.addr@mail.net 과 같은 특이한 메일주소도.. 

위의 정규식에서는 이러한 형태들까지 모두 허용해주고있다.


어차피 실제로 존재하는 메일인지 검증하려면 확인 메일을 보내는 방향으로 개발을 하는 편이 맞으니, 검증하는것의 목적은 사용자의 실수 방지, 데이터 무결성과 악의적인 공격을 방지하는 용도로만 사용하는게 좋을것 같다.




그런데 최근 PHP5.2 에서부터 이런 유효성 체크하는 기능을 함수로 제공해주고 있다는 사실을 이제야 발견하게 되었다!


그중 이메일 체크하는 함수를 살펴보면 다음과 같다.


if( !filter_var($_GET['email'], FILTER_VALIDATE_EMAIL) ){
echo '이메일주소 형식 오류';
}


filter_var : http://php.net/manual/en/function.filter-var.php


지정된 필터로 변수를 필터링 하는 함수! 


긴 정규식을 따로 안써줘도 되고 너무 간편하다!


또한 제공하는 필터 종류가 굉장히 많다.



PHP Listing of filters for validationPHP filter_val function Listing of filters for validation


BOOLEAN, FLOAT,INT, IP, MAC ,URL 형태 검증등 자주 사용할만한 기능들이 다 모여있다.


INT 에는 min_range, max_range 등의 옵션을 활용해 범위까지 체크가 가능하고

flag 로 HEX값을 허용할건지까지 설정이 가능하다. 


IP나 URL은 정말 유용할것같다! 



그런데 검증을 위한 필터 뿐만 아니라, 불필요한 값을 제거해주는 필터 또한 제공한다는 사실!





echo filter_var('1abc#2', FILTER_SANITIZE_NUMBER_INT); >> 결과 : 12

이외에 URL이나 EMAIL, FLOAT 등은 예상했던 결과하고는 달라서 딱히 쓸일은 없을듯하다.. 









출처: http://brtech.tistory.com/36 [Dev Stack]










댓글