PHP自带方法验证邮箱是否存在


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

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正则表达式过滤html标签属性(DEMO)
jquery ajax结合thinkphp的getjson实现跨域的方法
ThinkPHP使用心得分享-分页类Page的用法
如何调试异步加载页面里包含的js文件
JavaScript编程中实现对象封装特性的实例讲解
JavaScript获取图片像素颜色并转换为box-shadow显示
QuiteRSS: Linux桌面的RSS阅读器 你值得拥有
C#数据绑定(DataBinding)简单实现方法
css教程制作css圆角边框(兼容全部浏览器)
如何解决PHP使用mysql_query查询超大结果集超内存问题
jQuery插件开发的两种方法及$.fn.extend的详解
win10耳机有电流声而且声音很大影响使用该怎么办?
如何解决JQuery ajaxSubmit提交中文乱码
Win10 Mobile Build 10549正式推送:须回滚到WP8.1升级
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 CMS SQL jQuery C# C++ java Android IOS oracle MongoDB PostgreSQL SQLite 交通频道 康威汽车用品批发 江西省南昌市建设西路199号(洪城客运站东楼正对面)icp备案证书号
福州晋安泉头客运站 华林路
陆城镇农村客运站 湖南省岳阳市云溪区
武汉侏儒客运站 湖北省武汉市蔡甸区
遂宁西眉汽车站 四川省遂宁市安居区
卧龙区谢庄乡客运站 河南省南阳市卧龙区
田东汽车总站 百色市田东县
黎明客运站 黑龙江省双鸭山市宝清县
北镇罗罗堡客运站 辽宁省锦州市北镇市
建平客运站 一零一国道
攀枝花长途汽车站 四川省攀枝花市仁和区
柏树乡汽车站 河南省洛阳市汝阳县
景客隆兴溪车站 江西省景德镇市浮梁县
和林格尔公喇嘛汽车站 内蒙古自治区呼和浩特市和林格尔县
义县九道岭客运站 辽宁省锦州市义县
马市车站 江西省吉安市泰和县
阜阳中心客运站 安徽省阜阳市颍州区
舒城五显汽车站 安徽省六安市舒城县
环潭客运站 湖北省随州市曾都区
临安湍口客运站 浙江省杭州市临安市
元坝区卫子客运站 四川省广元市元坝区
平等乡汽车站 河南省洛阳市伊川县
鹤庆县出租公司客运站 云南省大理白族自治州鹤庆县
泸州游湾客运站 四川省泸州市江阳区
庄寨镇汽车站 山东省菏泽市曹县
大新汽车站 养利路466
徐庄客运站 山东省聊城市莘县
吴江汽车客运站 交通路
锦州铁北客运站 中央北街明德花苑4-171
连南县汽车站客运综合大楼 广东省清远市连南瑶族自治县
荣军交通客运中心 黑龙江省黑河市嫩江县
江安贵全客运中心 夕佳大道198
民权顺河客运站 河南省商丘市民权县
彝良客运中心站 云南省昭通市彝良县
武汉柏泉客运站 湖北省武汉市东西湖区
宿州西站 邮政储蓄银河东仙桥支行北侧
客运北站商店 江苏省泰州市泰兴市
登封石道客运站 三二三省道
万州郭村镇汽车站 葛腾街201号重庆农村商业银行郭村分理处旁边
射洪县太乙汽车客运站 四川省遂宁市射洪县
西码头客运站 浙江省舟山市定海区
西安魏寨汽车站 陕西省西安市长安区
回龙镇客运站 广东省河源市龙川县
佳木斯市公路客运总站 林海路93
上海港国际客运中心 东大名路500号
九三客运中心站 鹤山街
杭州汽车东站小商品市场停车场 浙江省杭州市江干区
中总汽车站小卖部 福建省泉州市惠安县
佳县汽车站 陕西省榆林市佳县
木桐乡客运站 河南省三门峡市卢氏县
歙县三阳叶村客运服务站 三二四省道
穆棱客运站北街停靠站 黑龙江省牡丹江市穆棱市
会昌麻州镇车站 江西省赣州市会昌县
合肥汽车客运总站停车场 安徽省合肥市瑶海区
华南客运站 福建省泉州市石狮市
奉节港口车站 诗城路668号东30米
中心汽车站-公交车站 湖南省怀化市靖州苗族侗族自治县
里松客运站 广西壮族自治区贺州市八步区
紫薇客运站 九铃中路
固城客运站 河南省濮阳市清丰县
平达客运站 云南省保山市龙陵县
崇武路亭汽车站 福建省泉州市惠安县
张北公会客运站 三四四省道
永和客运站 山西省临汾市永和县
日喀则东郊客运中心 仁布路4号
浏阳社港镇汽车站 湖南省长沙市浏阳市
半拉门客运站 辽宁省锦州市黑山县
象山县汽车客运站 浙江省宁波市象山县
集安花甸客运站 吉林省通化市集安市
密云公共汽车站 北京市密云县
凤翔陈村客运站 陕西省宝鸡市凤翔县
汽车站 滕州市荆河中路24号
增城增龙车站 增江大道北11
万里客运总站 河南省商丘市梁园区
德阳汽车站候车厅 华山南路一段19号
东厦汽车客运站售票厅 广东省汕头市金平区
万盛汽车站售票处 重庆市
商南客运站 长新西路355
北新街客运站 陕西省渭南市大荔县
石家庄客运总站到达货物提取处 河北省石家庄市桥西区
永川汽车总站 渝西大道中段1467号
淮北段园客运站 安徽省淮北市杜集区
孝姑客运站 四川省乐山市犍为县
瑞安南岸客运站 飞云西路
罗山县客运站 河南省信阳市罗山县
步云汽车站 人民路
苏集镇客运站 山东省菏泽市曹县
向阳客运站 吉林省长春市榆树市
李老庄客运站 河南省周口市沈丘县
山东滨州交运集团柳桥汽车站 山东省滨州市博兴县
泰安汽车西站 山东省泰安市岱岳区
福清石竹客运站 三二四国道
常熟人民桥汽车站 环城南路
大仵客运站 河南省商丘市柘城县
大麻车站 广东省梅州市大埔县
郧县郧阳汽车客运站 湖北省十堰市郧县
月河镇客运站 河南省南阳市桐柏县
襄樊华中光彩客运站 湖北省襄樊市襄阳区
孟州临泉车站 河南省焦作市孟州市
余杭汽车西站 一五省道

Copyright © 2016 phpStudy |