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

  首先附上代码

  

复制代码 代码如下:

  ^[_.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);

  return getmxrr($domain, $mxrecords);

  }

  else

  return true;

  else

  return false;

  }

  域名由各国文字的特定字符集、英文字母、数字及“-”(即连字符或减号)任意组合而成, 但开头及结尾均不能含有“-”,“-”不能连续出现 。 域名中字母不分大小写。域名最长可达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_、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:

  

复制代码 代码如下:

  <?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 = "[email protected]俺不是米vi地方就开iid邮件列表:[email protected][email protected];.;;,[email protected],[email protected]";

  $emailArr = getEmail($emailstr);

  echo "<pre>";

  print_r($emailArr);

  echo "</pre>";

  ?>打印如下:

  Array

  (

  [0] =>[email protected]

  [1] =>[email protected]

  [2] =>[email protected]

  [3] =>[email protected]

  [4] =>[email protected]

  )3.比较:第2里的正则里没有了第1的^和$;

  再看实例

  

复制代码 代码如下:

  function funcemail($str)//邮箱正则表达式

  {

  return (preg_match('/^[_.0-9a-z-a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$/',$str))?true:false;

  }//验证方法一

  $str="[email protected]";

  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!";

  }