>백엔드 개발 >PHP 튜토리얼 >PHP에서 이메일 주소 정규식 구현 및 자세한 설명

PHP에서 이메일 주소 정규식 구현 및 자세한 설명

高洛峰
高洛峰원래의
2016-12-01 09:40:231289검색

코드를 먼저 첨부하세요
코드를 복사하세요. 코드는 다음과 같습니다:
^[_.0-9a-z-]+@([0-9a-z][0-9a-z- ]+.) +[a-z]{2,3}$

이 정규식에서 "+"는 이전 문자열이 하나 이상 연속적으로 나타나는 것을 의미합니다. "^"는 다음 문자열이 다음 문자열에 나타나야 함을 의미합니다. 처음에 "$"는 이전 문자열이 끝에 나타나야 함을 의미합니다.
"."도 "."입니다. 여기서 ""는 이전 문자열을 의미합니다. 2~3회 연속으로 나타날 수 있습니다. "()"는 포함된 콘텐츠가 대상 개체에도 나타나야 함을 의미합니다. "[_.0-9a-z-]"는 "_", ".", "-"에 포함된 문자, a~z 범위의 문자, 0~9 범위의 숫자를 의미합니다. >이런 식으로 이 정규 표현식은 다음과 같이 번역될 수 있습니다:
"다음 문자는 시작 부분(^)에 있어야 합니다.", "문자는 "_", ".", "-" 안에 포함되어야 합니다. a ~ z 범위의 문자, 0 ~ 9 범위의 숫자 ([_.0-9a-z-])", "앞의 문자가 한 번 이상 나타납니다 (+)", @, "문자열은 다음으로 구성됩니다. a~z 범위의 문자, 0~9 범위의 숫자, "-"에 포함된 최소 하나의 문자, a~z 범위의 모든 문자, 0~9 범위의 문자로 시작합니다. a 숫자는 . (([0-9a-z][0-9a-z-]+.))", "이전 문자가 한 번 이상 나타납니다(+).", "a부터 z 범위의 문자까지 2~3번 나타나고 ([a-z]{2,3}$)"로 끝납니다.
코드 복사 코드는 다음과 같습니다.
function is_valid_email($email, $test_mx = false)
{
if(eregi("^([_a-z0-9-]+)(.[_a-z0-9-]+)*@([a-z0-9-]+)(. [a- z0-9-]+)*(.[a-z]{2,4})[ wind_phpcode_0 ]quot;, $email))
if($test_mx)
{
list($ 사용자 이름, $ domain) = 분할("@", $email);
return getmxrr($domain, $mxrecords)
}
else
return true;
}

도메인 이름은 국가별 특정 문자 집합, 영문자, 숫자 및 "-"(하이픈 또는 빼기 기호 등)의 조합으로 구성되지만 맨 앞에 또는 끝에 "-"와 "-"는 연속해서 나타날 수 없습니다. 도메인 이름의 문자는 대소문자를 구분하지 않습니다. 도메인 이름은 최대 60바이트(접미사 .com, .net, .org 등 포함)까지 가능합니다.
/^[a-z]. ([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a -z0-9]+)+[ .][a-z]{2,3}([.][a-z]{2})?$/i;
/content/i는 대소문자를 구분하지 않는 정규식을 형성합니다.
^ 매칭 시작

$ 매칭 종료

[a-z] 이메일 접두어는 영문자로 시작해야 합니다

([a-z0-9]* [-_]?[a -z0-9]+)*는 _a_2, aaa11, _1_a_2와 일치하지만 a1_, aaff_33a_, a__aa와 일치하지 않습니다. null 문자인 경우 *도 0 이상을 의미합니다.

*는 0개 이상의 이전 문자를 나타냅니다.

[a-z0-9]*는 0개 이상의 영문자 또는 숫자와 일치합니다.

[-_ ]? 1 "-", "-"는 연속해서 나올 수 없기 때문에

[a-z0-9]+ "-"는 어미로 사용할 수 없기 때문에 1개 이상의 영문자 또는 숫자와 일치합니다

@에는 ​​@가 있어야 합니다.

([a-z0-9]*[-_]?[a-z0-9]+)+ 위 참조([a-z0 -9]*[-_]? [a-z0-9]+)* 설명이지만 비워둘 수 없습니다. +는 하나 이상을 의미합니다.

[.] 특수 문자(.)를 일반 문자로 취급

[a-z]{2,3}은 2~3개의 영문자와 일치하며 일반적으로 com 또는 net 등입니다.

([.][a-z]{2})? 0 또는 1과 일치합니다. [.][a-z]{2}(예: .cn 등) .com.cn의 마지막 부분이 일반적으로 모두 두 자리 숫자입니다. 그렇지 않은 경우 {2}를 {시작 단어 수, 끝 단어 수}로 수정하세요.

자세한 설명과 함께 완벽한 이메일 정규 표현식을 테스트해 보세요! 2. 문자열에서 이메일 추출:
코드 복사 코드는 다음과 같습니다:
function getEmail($str) {
$pattern = "/([a-z0- 9] *[-_.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z] {2 ,3}([.][a-z]{2})?/i";
preg_match_all($pattern,$str,$emailArr);
return $emailArr[0];
}
$emailstr = "9999@qq.com.cn 저는 Mivi 플레이스가 아니기 때문에 iid 메일링 리스트를 열었습니다: fuyongjie@163.com 및 hh@qq.com;.;;, fuyongjie.100@yahoo .com,fu-1999 @sina.com";
$emailArr = getEmail($emailstr);
echo "

"; 
print_r($emailArr);
echo "< ;/pre>";
?>다음과 같이 인쇄하세요:
배열
(
[0] =>9999@qq.com.cn
[1] =>fuyongjie @163.com
[2] =>hh@qq.com
[3] =>fuyongjie.100@yahoo.com
[4] =>fu-1999@sina.com
) 3. 비교 : 두 번째 정규식에는 첫 번째 ^와 $가 포함되지 않습니다.

예제를 다시 살펴보세요
코드 복사 코드는 다음과 같습니다.
function funcemail ($str)//메일박스 정규 표현식
{
return (preg_match('/^[_.0-9a-z-a-z-]+@([0-9a-z][0-9a-z- ]+.)+[a-z]{2, 4}$/',$str))?true:false;
}//확인 방법 1
$str="qbcd@126.com.cn" ;
preg_match("/^[0-9a-z]+@(([0-9a-z]+)[.])+[a-z]{2,3}$/",$str,$re)
print_r($re);//이메일 확인 2
if (eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-] +.)+[a-z]{2,3}$",$email)) {
echo "귀하의 이메일이 예비 확인을 통과했습니다.";
}//세 번째 이메일 확인 방법

if (ereg("/^[a-z]([a-z0-9]*[-_.]?[a-z0-9]+)*@([a-z0-9]*[- _]? [a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?$/i)){
echo "귀하의; 이메일 주소가 정확합니다!";}
else{
echo "다시 시도해 주세요!";
}

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.