PHP自带方法验证邮箱是否存在


Posted in PHP onFebruary 01, 2016

PHP校验邮箱地址的方法很多, 比较常用的就是自己写正则了, 不过正则多麻烦, 我PHP自带了方法做校验。

filter_var

filter_var是PHP内置的一个变量过滤的方法, 提供了很多实用的过滤器, 可以用来校验整数、浮点数、邮箱、URL、MAC地址等。

filter_var如果返回false, 说明变量无法通过过滤器, 也就是不合法了。

$email = "lastchiliarch@163.com";
 
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
 
 
$email = "asb";
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
 
$email = "1@a.com";
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));

输出:

string(21) "lastchiliarch@163.com"
bool(false)
string(7) 1@a.com

对于asb这种非法邮箱格式返回了false, 但对于1@a.com则通过了,还是略有瑕疵啊。

不过一般的正则也通过会认为1@a.com是一个合法的邮箱, 那有啥办法可以更精准的验证呢?

checkdnsrr

checkdnsrr其实是用来查询指定的主机的DNS记录的,我们可以借用它来验证邮箱是否存在。

对于1@a.com肯定是MX记录不存在的。

$email = "lastchiliarch@163.com";
  var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX"));
  $email = "1@a.com";
  var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX"));

输出:

bool(true)
  bool(false)

可以看到, 很完美, 唯一的缺点就是太慢了, 毕竟是要做一次网络请求。 所以不适合同步对大量的邮箱采用这种做法去校验。

filter_var+checkdnsrr

我们可以接合filter_var 和checkdnsrr做校验, 对于绝大多数的非法邮箱肯定会在filter_var的时候就挂掉了, 剩下的再用

checkdnsrr进一步判断。

$email_arr = array("lastchiliarch@163.com", "1@a.com");
  foreach($email_arr as $email) {
    if (filter_var($email) === false) {
      echo "invalid email: $email \n";
      continue;
    }
 
    if(checkdnsrr(array_pop(explode("@",$email)),"MX") === false) {
      echo "invalid email: $email \n";
      continue;
    }
  }

   输出:

invalid email: 1@a.com

但要注意的是, 由于只是检查MX记录, 所以只能判断163.com是存在的, 但不能说明lastchiliarch这个用户是存在的。

想要更精确的判断邮箱存在, 那只能连接到smtp服务器去验证了。

介绍了邮箱验证,PHP自带方法如何验证邮箱、URL、IP是否合法,下面为大家介绍:

主要还是使用的是filter_var函数

语法
filter_var(variable, filter, options)
variable 必需。规定要过滤的变量。
filter 可选。规定要使用的过滤器的 ID。
options 规定包含标志/选项的数组。检查每个过滤器可能的标志和选项。

PHP Filters

PHP自带方法验证邮箱是否存在

Example #1 A filter_var() example

<?php

var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));

var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED));

?>

以上例程会输出:

string(15) "bob@example.com"
bool(false)

以上就是本文的全部内容,希望对大家进行php邮箱验证有所帮助。

PHP 相关文章推荐
对javascript和select部件的结合运用
Oct 09 PHP
php获取mysql版本的几种方法小结
Mar 25 PHP
一步一步学习PHP(6) 面向对象
Feb 16 PHP
php下将图片以二进制存入mysql数据库中并显示的实现代码
May 27 PHP
php采用ajax数据提交post与post常见方法总结
Nov 10 PHP
PHP IDE phpstorm 常用快捷键
May 18 PHP
学习php设计模式 php实现原型模式(prototype)
Dec 07 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
Jun 20 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
Aug 08 PHP
php实现URL加密解密的方法
Nov 17 PHP
PHP微商城开源代码实例
Mar 27 PHP
YII CLinkPager分页类扩展增加显示共多少页
Jan 29 #PHP
实例详解PHP中html word 互转的方法
Jan 28 #PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 #PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
Jan 27 #PHP
PHP文件上传之多文件上传的实现思路
Jan 27 #PHP
PHP内核学习教程之php opcode内核实现
Jan 27 #PHP
PHP编程入门的基本语法知识点总结
Jan 26 #PHP
You might like
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
JavaScript 动态创建VML的方法
2009/10/14 Javascript
javascript函数以及基础写法100多条实用整理
2013/01/13 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
2017/07/11 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
vue编写简单的购物车功能
2021/01/08 Vue.js
node中短信api实现验证码登录的示例代码
2021/01/20 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
python利用urllib和urllib2访问http的GET/POST详解
2017/09/27 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
django如何实现视图重定向
2019/07/24 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
英国航空官网:British Airways
2016/09/11 全球购物
C#中的验证控件有几种
2014/03/08 面试题
软件测试笔试题
2012/10/25 面试题
专业实习自我鉴定
2013/10/29 职场文书
打架检讨书100字
2014/01/08 职场文书
总经理工作职责范文
2014/03/14 职场文书
应聘教师求职信范文
2015/03/20 职场文书
Centos7 Shell编程之正则表达式、文本处理工具详解
2022/08/05 Servers