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文件下载类
Dec 06 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
Apr 15 PHP
探讨php中header的用法详解
Jun 07 PHP
ThinkPHP令牌验证实例
Jun 18 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
Jul 05 PHP
PHP传参之传值与传址的区别
Apr 24 PHP
php实现点击可刷新验证码
Nov 07 PHP
利用PHP生成静态html页面的原理
Sep 30 PHP
laravel学习笔记之模型事件的几种用法示例
Aug 15 PHP
利用PHP获取汉字首字母并且分组排序详解
Oct 22 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
Discuz不使用插件实现简单的打赏功能
Mar 21 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面向对象学习笔记之一 基础概念
2012/10/06 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
YUI的Tab切换实现代码
2010/04/11 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
JS执行删除前的判断代码
2014/02/18 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
2015/04/21 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
js中apply与call简单用法详解
2017/11/06 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
javascript实现抢购倒计时程序
2019/08/26 Javascript
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
[00:11]战神迅矛
2019/03/06 DOTA
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
详解python3百度指数抓取实例
2016/12/12 Python
Python中模块string.py详解
2017/03/12 Python
python爬取网页内容转换为PDF文件
2020/07/28 Python
对Python中画图时候的线类型详解
2019/07/07 Python
pytorch: Parameter 的数据结构实例
2019/12/31 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
人事主管岗位职责说明书
2014/07/30 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
个人诉讼委托书范本
2014/10/17 职场文书
Python使用scapy模块发包收包
2021/05/07 Python
Python+Tkinter制作专属图形化界面
2022/04/01 Python
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang