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 相关文章推荐
Cannot modify header information错误解决方法
Oct 08 PHP
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
Jun 08 PHP
php常用Stream函数集介绍
Jun 24 PHP
php使用正则过滤js脚本代码实例
May 10 PHP
PHP return语句的另一个作用
Jul 30 PHP
ThinkPHP实例化模型的四种方法概述
Aug 22 PHP
php面向对象中static静态属性和静态方法的调用
Feb 08 PHP
php实现递归抓取网页类实例
Apr 03 PHP
PHP模拟post提交数据方法汇总
Feb 16 PHP
PHP中的print_r 与 var_dump 输出数组
Jun 13 PHP
总结PHP删除字符串最后一个字符的三种方法
Aug 30 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
Oct 12 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
javascript中的数字与字符串相加实例分析
2011/08/14 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
js动态创建标签示例代码
2014/06/09 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
2016/03/01 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
2017/01/11 Javascript
详谈ES6中的迭代器(Iterator)和生成器(Generator)
2017/07/31 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
vscode 开发Vue项目的方法步骤
2018/11/25 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
[05:31]干嘛呢兄弟!DOTA2 TI9语音轮盘部分出处
2019/05/14 DOTA
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
Python unittest框架操作实例解析
2020/04/13 Python
windows支持哪个版本的python
2020/07/03 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
2015元旦感言
2015/12/09 职场文书
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python