首頁 >後端開發 >php教程 >php中郵箱地址正規表示式實現與詳解

php中郵箱地址正規表示式實現與詳解

高洛峰
高洛峰原創
2016-12-01 09:40:231289瀏覽

首先附上代碼 
複製代碼 代碼如下: 
^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2 ,3}$ 

在這段正規表示式中,「+」表示前面的字串連續出現一個或多個;「^」表示下一個字串必須出現在開頭,「$」表示前一個字串必須出現在結尾; 
“.”也就是“.”,這裡“”是轉義符;“{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範圍內任何一個數字中的字符,最後以.結束(([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($username, $domain) = split("@", $email); mail); getmxrr($domain, $mxrecords); 

else 
return true; 
else 
return false; 

else 
return false; 


(即英文符號連字符和原始字節由所有字母符號集、即英文符號連字符、即英文符號連字符、即英文符號連》(即英文字節)號)任意組合而成, 但開頭及結尾均不能含有“-”,“-”不能連續出現。 、.org等)。 ?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?$/i; 
/內容/i 構成一個不區分大小寫的正規表示式; 
^ 匹配開始 

$ 匹配結束 

[a-z] E-Mail前綴必需是一個英文字母開頭 

([a-z0-9]*[-_]?[a-z0-9[a-z0-9 ]+)* 和_a_2、aaa11、_1_a_2匹配,和a1_、aaff_33a_、a__aa不匹配,如果是空字符,也是匹配的,*表示0個或多個。

*表示0個或多個前面的字元. 

[a-z0-9]* 符合0個或多個英文字母或數字 

[-_]? 符合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 }為{起始字數,結束字數} 

完美E-Mail正規表示式,附詳細講解,請大家幫忙測試一下! 2.抽取字串中的email: 
複製程式碼 程式碼如下: 
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@v.com.cnq就開iid郵件列表:fuyongjie@163.com和hh@qq.com;.;;,fuyongjie.100@yahoo.com,fu-1999@sina.com"; 
$emailArr = getEmail($emailstr); echo "

"; <br>print_r($emailArr); <br>echo "
"; 
?>印如下: 
Array 

[0] =>9999@qq.com.cncom =>fuyongjie@163.com 
[2] =>hh@qq.com 
[3] =>fuyongjie.100@yahoo.com 
[4] =>fu-1999@sina.com 
)3.比較:)3.比較:第2裡的正則裡沒有了第1的^和$; 

再看實例 
複製碼 代碼如下: 
function funcemail($str)//郵箱正規表示式 

return ($str)//郵箱正規表示式 

return (p^preg _.0-9a-z-a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$/',$str))?true: false; 
}//驗證方法一 
$str="qbcd@126.com.cn"; 🎜preg_match("/^[0-9a-z]+@(([0-9a-z]+)[.])+[a-z]{2,3}$/",$str,$re); 
print_r($re);//信箱驗證二 
if (eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+ [a-z]{2,3}$",$email)) { 
echo "您的e-mail 通過初步檢查"; 
}//第三種郵箱驗證方法 

if (ereg("/^[a-z ]([a-z0-9]*[-_.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+) +[.][a-z]{2,3}([.][a-z]{2})?$/i; ",$email)){ 
echo "your email address is correct!";} 
   else{
echo "please try again!"; 
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn