正确匹配邮件地址的正则到底应该怎么写? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
9
V2EX    问与答

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

  •  
      9 2014 年 5 月 27 日 4779 次点击
    这是一个创建于 4250 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本来挺有自信的,然后看了这个提问后( 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 年 5 月 27 日
    PHP的话,filter_var($str, FILTER_VALIDATE_EMAIL) 就行,有些东西不必再发明车轮。
    Sdhjt
        2
    Sdhjt  
       2014 年 5 月 27 日
    我用的这个:
    ^\w+([-.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

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

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

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

    月光博客上的.
    chemzqm
        9
    chemzqm  
       2014 年 5 月 27 日
    /.+\@.+\..+/ 对用户和开发者宽容点吧
    wzxjohn
        10
    wzxjohn  
       2014 年 5 月 27 日
    又学到了一招。以后去炫耀一下=。=
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5625 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 08:43 PVG 16:43 LAX 00:43 JFK 03:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86