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 相关文章推荐
PHP 出现乱码和Sessions验证问题的解决方法!
Dec 06 PHP
php中利用post传递字符串重定向的实现代码
Apr 21 PHP
php防止sql注入代码实例
Dec 18 PHP
理解PHP中的stdClass类
Apr 18 PHP
thinkphp中空模板与空模块的用法实例
Nov 26 PHP
phpstorm配置Xdebug进行调试PHP教程
Dec 01 PHP
初识laravel5
Mar 02 PHP
PHP区块查询实现方法分析
May 12 PHP
php学习笔记之字符串常见操作总结
Jul 16 PHP
Laravel框架Eloquent ORM修改数据操作示例
Dec 03 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
Mar 16 PHP
php7 错误处理机制修改实例分析
May 25 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中的pathinfo模式和URL重写
2014/01/06 PHP
两款万能的php分页类
2015/11/12 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
原生js实现随机点名功能
2019/11/05 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
Python交换变量
2008/09/06 Python
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
基于Django静态资源部署404的解决方法
2019/07/28 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
python 还原梯度下降算法实现一维线性回归
2020/10/22 Python
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
ASOS亚洲:ASOS Asia
2018/03/04 全球购物
华三通信H3C面试题
2015/05/15 面试题
蛋糕店的商业计划书范文
2014/01/27 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
集中整治工作方案
2014/05/01 职场文书
病媒生物防治方案
2014/05/13 职场文书
民事答辩状格式范文
2015/05/21 职场文书
品德与社会教学反思
2016/02/24 职场文书
2016年主题党日活动总结
2016/04/05 职场文书
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android