E-mail象普通的郵件—樣,也需要地址,它與普通郵件的區別在於它是電子地址。所有在Internet之上有信箱的使用者都有自己的一個或幾個Email address,而這些Email address都是唯一的。郵件伺服器就是根據這些位址,將每封電子郵件傳送到各個使用者的信箱中,Email address就是使用者的信箱位址。就像普通郵件一樣,你能否收到你的E-mail,取決於你是否取得了正確的電子郵件地址。 —個完整的Internet郵件地址由以下兩個部分組成,格式如下:登入名稱@主機名稱.網域 中間用—個表示「在」(at)的符號「@」分開,符號的左邊是對方的登入名,右邊是完整的主機名,它由主機名稱與網域組成。其中,網域由幾個部分組成,每一部分稱為一個子網域(Subdomain),各子網域之間以圓點「.」隔開,每個子網域都會告訴使用者一些有關這台郵件伺服器的資訊。
php 正規比對郵件程式碼
1.驗證email:
< ?php 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!"; } ?>
或
$str = ''; $isMatched = preg_match('/^\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}$/', $str, $matches); var_dump($isMatched, $matches);
符合Email信箱格式的正規表示式:
/^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$/i;
解析:
/內容/i 構成一個不區分大小寫的正規表示式;
^ 匹配開始
$ 匹配結束
[a-z] E-Mail前綴必備是一個英文字母開頭
([a-z0-9]*[-_]?[a-z0-9]+)* 和_a_2、aaa11、_1_a_2匹配,和a1_、aaff_33a_、aaa不匹配,如果是空字符,也是匹配的,*表示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}為{起始字數,結束字數}
這個用於匹配郵箱的正則表達式,還是比較強的,功能強大,覆蓋廣泛,有用到的朋友收藏下吧。
國際網域格式如下:
網域由各國文字的特定字元集、英文字母、數字及「-」(即連字號或減號)任意組合而成,但開頭及結尾均不能含有“-”,並且“-”不能連續出現。 網域名稱中字母不分大小寫。網域最長可達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;
/內容/i 構成一個不區分大小寫的正規表示式;
^ 匹配開始
$ 匹配結束
[a-z] E-Mail前綴必需是一個英文字母開頭
([a-z0-9]*[-_]?[ a-z0-9]+)* 和_a_2、aaa11、_1_a_2匹配,和a1_、aaff_33a_、aaa不匹配,如果是空字符,也是匹配的,*表示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:
<?php 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俺不是米vi地方就开iid邮件列表:fuyongjie@163.com 和hh@qq.com;.;;,fuyongjie.100@yahoo.com,fu-1999@sina.com"; $emailArr = getEmail($emailstr); echo "<pre class="brush:php;toolbar:false">"; print_r($emailArr); echo ""; ?>
運行如下:
Array ( [0] => 9999@qq.com.cn [1] => fuyongjie@163.com [2] => hh@qq.com [3] => fuyongjie.100@yahoo.com [4] => fu-1999@sina.com )
3.比較:第2裡的正則裡沒有了第1的^和$;
以上是php 使用正規驗證email信箱的詳細內容。更多資訊請關注PHP中文網其他相關文章!