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实现多服务器session共享之NFS共享的方法
Mar 16 PHP
Google Voice 短信发送接口PHP开源版(2010.5更新)
Jul 22 PHP
php中操作memcached缓存进行增删改查数据的实现代码
Aug 15 PHP
php实现对两个数组进行减法操作的方法
Apr 17 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
Jul 01 PHP
如何实现php图片等比例缩放
Jul 28 PHP
PHP的AES加密算法完整实例
Jul 20 PHP
PHP数组生成XML格式数据的封装类实例
Nov 10 PHP
php中__toString()方法用法示例
Dec 07 PHP
laravel 获取某个查询的查询SQL语句方法
Oct 12 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
Oct 16 PHP
laravel框架语言包拓展实现方法分析
Nov 22 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
个人站长制做网页常用的php代码
2007/03/03 PHP
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
学习ExtJS border布局
2009/10/08 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
document.all的一个比较完整的总结及案例
2013/01/31 Javascript
JS模块与命名空间的介绍
2013/03/22 Javascript
将List对象列表转换成JSON格式的类实现方法
2016/07/04 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
python 字典(dict)按键和值排序
2016/06/28 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
完美解决pycharm 不显示代码提示问题
2020/06/02 Python
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
通用求职信范文模板分享
2013/12/27 职场文书
爱国口号
2014/06/19 职场文书
实习护士自荐信
2014/06/21 职场文书
三八妇女节慰问信
2015/02/14 职场文书
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript