首先附上代碼
複製代碼 代碼如下:
^[_.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 "";