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


Posted in PHP onApril 24, 2012

首先附上代码

^[_.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 = "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>"; 
print_r($emailArr); 
echo "</pre>"; 
?>打印如下: 
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的^和$;

再看实例
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="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!"; 
}
PHP 相关文章推荐
十天学会php之第一天
Oct 09 PHP
php 文件状态缓存带来的问题
Dec 14 PHP
用php的ob_start来生成静态页面的方法分析
Mar 09 PHP
将时间以距今多久的形式表示,PHP,js双版本
Sep 25 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
php 地区分类排序算法
Jul 01 PHP
神盾加密解密教程(三)PHP 神盾解密工具
Jun 08 PHP
Sublime里直接运行PHP配置方法
Nov 28 PHP
codeigniter显示所有脚本执行时间的方法
Mar 21 PHP
php调整服务器时间的方法
Apr 03 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
Jan 25 PHP
使用PHP开发留言板功能
Nov 19 PHP
PHPMYADMIN导入数据最大为2M的解决方法
Apr 23 #PHP
php 多关键字 高亮显示实现代码
Apr 23 #PHP
php入门之连接mysql数据库的一个类
Apr 21 #PHP
洪恩在线成语词典小偷程序php版
Apr 20 #PHP
php 文件上传实例代码
Apr 19 #PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 #PHP
php和mysql中uft-8中文编码乱码的几种解决办法
Apr 19 #PHP
You might like
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
php数组键名技巧小结
2015/02/17 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
2019/07/03 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
js prototype截取字符串函数
2010/04/01 Javascript
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
js如何设置在iframe框架中指定div不显示
2013/12/04 Javascript
js实现仿Discuz文本框弹出层效果
2015/08/13 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
基于jQuery实现的打字机效果
2017/01/16 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
使用Python编写基于DHT协议的BT资源爬虫
2016/03/19 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
python numpy生成等差数列、等比数列的实例
2020/02/25 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
2020/05/26 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
利用Python的folium包绘制城市道路图的实现示例
2020/08/24 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
List, Set, Map是否继承自Collection接口?
2016/05/16 面试题
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
个人求职信范文分享
2014/01/06 职场文书
烹饪自我鉴定
2014/03/01 职场文书
合作协议书
2014/04/23 职场文书
作风转变心得体会
2014/09/02 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP