php中邮箱地址正则表达式实现与详解

首先附上代码
<div class="codetitle"><a style="CURSOR: pointer" data="29676" class="copybut" id="copybut29676" onclick="doCopy('code29676')"> 代码如下:

<div class="codebody" id="code29676">
^[_.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}$)”
<div class="codetitle"><a style="CURSOR: pointer" data="21390" class="copybut" id="copybut21390" onclick="doCopy('code21390')"> 代码如下:
<div class="codebody" id="code21390">
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})[ windPHPcode_0 ]quot;,$email))
if($test_mx)
{
list($username,$domain) = split("@",$email);
return getmxrr($domain,$mxrecords);
}
else
return true;
else
return false;
}

域名由各国文字的特定字符集、英文字母、数字及“-”(即连字符或减号)任意组合而成,但开头及结尾均不能含有“-”,“-”不能连续出现 。 域名中字母不分大小写。域名最长可达60个字节(包括后缀.com、.net、.org等)。
/^a-z@([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_a2匹配,和a1、aaff33a、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:
<div class="codetitle"><a style="CURSOR: pointer" data="99364" class="copybut" id="copybut99364" onclick="doCopy('code99364')"> 代码如下:
<div class="codebody" id="code99364">
<?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 "
"; 
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的^和$;

再看实例
<div class="codetitle"><a style="CURSOR: pointer" data="38885" class="copybut" id="copybut38885" onclick="doCopy('code38885')"> 代码如下:<div class="codebody" id="code38885">
function funcemail($str)//邮箱正则表达式
{
return (pregmatch('/^[.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}$/",$re);
printr($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-z]{2,3}([.][a-z]{2})?$/i; ",$email)){
echo "your email address is correct!";}
   else{
echo "please try again!";
}

正则表达式邮箱地址

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...