V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
9
V2EX  ›  问与答

正确匹配邮件地址的正则到底应该怎么写?

  •  
  •   9 · 2014-05-27 16:29:53 +08:00 · 4354 次点击
    这是一个创建于 3826 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本来挺有自信的,然后看了这个提问后( http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address ) 就不淡定了。

    尤其是看到这一大段的正则( http://ex-parrot.com/~pdw/Mail-RFC822-Address.html ),心中一万只草泥马奔腾而过。

    至于其中有个人说的“最靠谱的方法也许是发封邮件给这个邮件地址看有没有回执”,这真的不是搞笑?
    10 条回复    2014-05-27 20:46:50 +08:00
    Quaintjade
        1
    Quaintjade  
       2014-05-27 16:42:08 +08:00
    PHP的话,filter_var($str, FILTER_VALIDATE_EMAIL) 就行,有些东西不必再发明车轮。
    Sdhjt
        2
    Sdhjt  
       2014-05-27 17:09:12 +08:00
    我用的这个:
    ^\w+([-.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

    有时候正则没必要完全精确匹配,否则
    书写麻烦:LZ举例我就不说明了
    无法准确验证:书写复杂的正则,看上去很NB,但很容易误杀,比如你考虑过中文域名么。。。。
    效率低下:我试验过,复杂的正则效率非常低。就拿上面的正则来说,是无法判断email地址是否包含下划线,也无法判断email地址长度是否超标的,但是效率可以接受。我测试过用再复杂点的正则去判断,效率反而比用if判断慢几倍。

    正则不是万能的,还是用if辅助一下靠谱。
    Mutoo
        3
    Mutoo  
       2014-05-27 17:27:23 +08:00
    RFC是业界标准,如果你非要用,选这个准没错。
    vellow
        4
    vellow  
       2014-05-27 17:27:56 +08:00
    @Sdhjt 这个貌似不能匹配连续的---,以及IP后缀。如"a--.--a@[13.22.40.1]"
    dajiangyou
        5
    dajiangyou  
       2014-05-27 17:38:30 +08:00
    @vellow IP后缀求科普。。。
    Sdhjt
        6
    Sdhjt  
       2014-05-27 18:40:58 +08:00
    @vellow 连续的-符号是不被允许的,肯定不能匹配。我测了下后缀为IP的情况可以匹配的。
    akfish
        7
    akfish  
       2014-05-27 19:11:35 +08:00
    兼容rfc理论上是没错的,而且也是现成写好的,又不是每次要你背出来。

    不过从实用简单的标准来讲,以大多数email服务提供商允许的用户名规则来写表达式就行了,奇葩地址出现概率太低,专门去兼容意义不大。
    decken
        8
    decken  
       2014-05-27 19:13:46 +08:00
    \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

    月光博客上的.
    chemzqm
        9
    chemzqm  
       2014-05-27 19:23:37 +08:00
    /.+\@.+\..+/ 对用户和开发者宽容点吧
    wzxjohn
        10
    wzxjohn  
       2014-05-27 20:46:50 +08:00
    又学到了一招。以后去炫耀一下=。=
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2679 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 05:57 · PVG 13:57 · LAX 21:57 · JFK 00:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.