V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ericgui
V2EX  ›  PHP

怎样对 email 地址进行验证( validation)? PHP manual 上,有好几个警告,不建议使用 php 自带的 filter, FILTER_VALIDATE_EMAIL。

  •  
  •   ericgui · 2016-11-29 16:30:23 +08:00 · 5646 次点击
    这是一个创建于 2920 天前的主题,其中的信息可能已经有所发展或是发生改变。

    PHP manual 里, http://php.net/manual/en/function.filter-var.php ,有好几个 note ,都不推荐使用 PHP 自带的 FILTER_VALIDATE_EMAIL 对 email 地址进行验证( validation )。

    其中一个 note 是这样的: Do not use FILTER_VALIDATE_EMAIL in production! It's not compatible with mail standarts

    我给此 note 的作者写邮件,他回复说:

    For moment I use regex "\S@\S" and validation by DNS query (MX).

    I have some valid examples to test: [email protected] admin@шина.рф 9test+issue12@test15

    You should analise a lot of RFC about mail and DNS subsystem before filter creation. Also there are interesting idea to use validation by UTF8 diapasons (in coments http://php.net/manual/en/function.filter-var.php).

    那么,我有 3 个问题: 1 、什么是 validation by DNS query ( MX )?啥意思? 2 、各位高人都是处理 email 地址的 validation 的呢? 3、有没有现成的轮子,直接可用的? 谢谢

    第 1 条附言  ·  2016-11-29 18:04:33 +08:00
    做了一番调研
    email validation 竟然还是一个巨大的难点,几乎所有方法都有缺陷。
    所以竟然还有专门的公司提供付费 api 做 email validation
    涨见识了
    7 条回复    2016-11-29 19:51:25 +08:00
    996635
        1
    996635  
       2016-11-29 17:12:59 +08:00
    1. 通过网络请求 验证 mail 服务器是否可访问
    2 3 .请 google symfony validator
    vibbow
        2
    vibbow  
       2016-11-29 18:23:54 +08:00
    1. 理想很美好,现实很惨烈。如果不做异步验证,把你程序拖慢几秒钟都是很正常的。
    2. [a-zA-Z0-9._-]+@[a-zA-Z0-9]+\.[a-zA-Z]+(\.[a-zA-Z]+)?
    // 随手写的正则式,没测试过
    // 能满足 99%的需求就够了,不考虑那 1%的人。
    dlllcs
        3
    dlllcs  
       2016-11-29 18:32:56 +08:00
    其实好简单, email 验证码或者激活链接不就是干这个的?
    SourceMan
        4
    SourceMan  
       2016-11-29 19:13:17 +08:00 via iPhone
    @vibbow 不支持中文邮
    ericgui
        5
    ericgui  
    OP
       2016-11-29 19:27:02 +08:00
    @dlllcs 我竟无言以对。。。。。
    kfll
        6
    kfll  
       2016-11-29 19:47:37 +08:00 via iPhone
    看你要验证格式还是验证有效性还是验证唯一性了……
    iamshang
        7
    iamshang  
       2016-11-29 19:51:25 +08:00 via Android
    嗯 整那么复杂干啥,正则验证格式,发送邮件验证有效性就满足多数需求了吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2911 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:29 · PVG 08:29 · LAX 16:29 · JFK 19:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.