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制作图型计数器的例子
Oct 09 PHP
PHP脚本的10个技巧(1)
Oct 09 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
Nov 19 PHP
PHP跨平台获取服务器IP地址自定义函数分享
Dec 29 PHP
PHP使用PDO连接ACCESS数据库
Mar 05 PHP
php使用GD实现颜色渐变实例
Jun 02 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
PHP附件下载中文名称乱码的解决方法
Dec 17 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
Jan 11 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
php中如何执行linux命令详解
Nov 06 PHP
Yii框架日志操作图文与实例详解
Sep 09 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实现获取FLV文件的时间
2015/02/10 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
JS实现倒序输出的几种常用方法示例
2019/04/13 Javascript
JavaScript代理模式原理与用法实例详解
2020/03/10 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
python中实现php的var_dump函数功能
2015/01/21 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
python里dict变成list实例方法
2019/06/26 Python
python输出决策树图形的例子
2019/08/09 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
Pandas操作CSV文件的读写实现方法
2019/11/13 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
艺术用品:Arteza
2018/11/25 全球购物
财务部经理岗位职责
2014/02/03 职场文书
人事专员职责
2014/02/22 职场文书
《二泉映月》教学反思
2014/04/15 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
借名购房协议书范本
2014/10/06 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS