关于不固定邮箱 @之后的“.”的正则表达式 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
wikinee
V2EX    Javascript

关于不固定邮箱 @之后的“.”的正则表达式

  •  
  •   wikinee 2015-10-22 11:26:45 +08:00 6264 次点击
    这是一个创建于 3644 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在学习 JS ,遇到一个问题。教程里关于邮箱正则表达式都是哪种单点的。
    针对复合域名,比如 [email protected] 这样的如何过滤,如果不知道输入的邮箱是有一个“.”两个“.”的如何写啊
    -----------
    目前我只想到 xxx.[com|cn|net|us]这种固定写法
    36 条回复    2015-11-02 19:11:06 +08:00
    wikinee
        1
    wikinee  
    OP
       2015-10-22 11:29:24 +08:00
    附上我以前讨论 a.b.c.txt 和 a.b.tar.gz 文件名提取的帖子
    http://v2ex.com/t/222982#reply14
    FrankFang128
        2
    FrankFang128  
       2015-10-22 11:31:03 +08:00
    有 @ 就过吧,别为难你的用户。
    你只支持 .com .cn .net .us 邮箱是啥意思啊。

    ([^.]+\.)+.[com|cn|net|us]
    FrankFang128
        3
    FrankFang128  
       2015-10-22 11:31:46 +08:00
    ([^.]+\.)+\.[com|cn|net|us]
    都怪你误导无了……
    Hello1995
        4
    Hello1995  
       2015-10-22 11:49:02 +08:00 via Android
    \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

    考虑一下域名以及用户名的字符限定以及首字符限定,这么写应该能通吃。
    wkdhf233
        5
    wkdhf233  
       2015-10-22 11:55:05 +08:00   1
    判断邮箱格式是否正确的话,后面有\w\.\w 就给过了吧
    二级域名不止多个.啊,有的还有-呢。。
    est
        6
    est  
       2015-10-22 12:20:46 +08:00
    最好的办法是解析域名 MX 记录,连一下 25 端口。
    gamexg
        7
    gamexg  
       2015-10-22 12:58:27 +08:00 via Android
    @est 直接发验证邮件完了。
    vitovan
        8
    vitovan  
       2015-10-22 13:02:23 +08:00
    [A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}
    Clarencep
        9
    Clarencep  
       2015-10-22 13:17:54 +08:00
    @gamexg +1

    验证邮箱大法好
    不想验证就取出 @后面的域名,解析下 dns 吧

    没必要限制域名
    gamexg
        10
    gamexg  
       2015-10-22 13:28:51 +08:00
    还有正则里面 . 是可以匹配 char(.) 的。
    别难为用户了,,有 @ 有 . 就行了。

    [^@]+@[^@]+\.[^@]+
    lygmqkl
        11
    lygmqkl  
       2015-10-22 13:30:37 +08:00
    [email protected] 代表邮箱,然后验证邮箱就行了。
    raysonx
        12
    raysonx  
       2015-10-22 13:37:11 +08:00
    表示我认识的圈子里有好多 [email protected] 的邮箱,看来楼主是不打算支持了
    flydogs
        13
    flydogs  
       2015-10-22 13:48:19 +08:00
    @ 后面 xxx.xxx 就可以过了。
    不管字母数字还是中文什么的。
    branchzero
        14
    branchzero  
       2015-10-22 13:51:04 +08:00
    域名不一定是 com|cn|net|us 结尾的说,最好还是按照 2-10 位的字母来写正则吧。
    fengdra
        15
    fengdra  
       2015-10-22 14:21:55 +08:00 via iPhone   1
    @vitovan 钻个牛角尖, [email protected]
    zonghua
        16
    zonghua  
       2015-10-22 14:23:06 +08:00
    不要尝试校验域名。

    @branchzero 域名是还可以用 - 的
    branchzero
        17
    branchzero  
       2015-10-22 14:26:18 +08:00
    @zonghua 额,我是说后缀,不是域名主体部分=。=
    zonghua
        18
    zonghua  
       2015-10-22 14:31:16 +08:00
    @branchzero 好吧,我看错了= =.
    jugelizi
        19
    jugelizi  
       2015-10-22 14:47:58 +08:00
    你这验证的目的?
    我记得有些必须 edu 给学生用的
    不然的话发验证到邮箱就解决啦,前端的验证没必要太过吧,会坑人的
    lililqth
        20
    lililqth  
       2015-10-22 15:18:52 +08:00
    \w+@(\w+.)+[com|cn|net|us]
    Slienc7
        21
    Slienc7  
       2015-10-22 19:58:52 +08:00 via Android
    [A-Za-z0-9]+?[A-Za-z0-9\.\-]*?[A-Za-z0-9]+@[A-Za-z0-9]+?[A-Za-z0-9\.\-]*?[A-Za-z0-9]+
    手写未测试 域名后缀一直增加 不可能固定 前后都可能非首末位- .
    Slienc7
        22
    Slienc7  
       2015-10-22 20:01:41 +08:00 via Android
    @xgowex 举个例子 aasa-sss.high.ffgg-fcuf@fcg-hgc.cgg-gvc.xn--hhuuh
    注意:实际-.不可能相连 上面的 re 没有考虑到
    可能中文邮箱,此处不做考虑
    sss3barry
        23
    sss3barry  
       2015-10-22 23:54:05 +08:00
    我们学校学生的邮箱 @mail.scut.edu.cn
    第一次看到直接惊呆,域名这么长
    jings
        24
    jings  
       2015-10-23 00:06:22 +08:00
    function isEmail(field){
    return field.value.indexOf("@") !=-1&&field.value.indexOf(".") !=-1
    }
    KoleHank
        25
    KoleHank  
       2015-10-23 08:07:14 +08:00
    据说最新标准 xxx@xxx 是合法的邮箱了,怎么办?
    virusdefender
        26
    virusdefender  
       2015-10-23 08:35:53 +08:00
    django 匹配邮箱的正则,你可以参考,这个都标准了吧


    def validate(self, value):
    value = super(EmailField, self).validate(value)
    user_regex = re.compile(
    r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*$"
    r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"$)',
    re.IGNORECASE)
    domain_regex = re.compile(
    r'(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}|[A-Z0-9-]{2,}(?<!-))$'
    # literal form, ipv4 address (SMTP 4.1.3)
    r'|^\[(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}\]$',
    re.IGNORECASE)
    domain_whitelist = ['localhost']
    if '@' not in value:
    raise ValidationError("Email format is not correct")

    user_part, domain_part = value.rsplit('@', 1)

    if not user_regex.match(user_part):
    raise ValidationError("Email format is not correct")

    if (domain_part not in domain_whitelist and
    not domain_regex.match(domain_part)):
    # Try for possible IDN domain-part
    try:
    domain_part = domain_part.encode('idna').decode('ascii')
    if not domain_regex.match(domain_part):
    raise ValidationError("Email format is not correct")
    else:
    return
    except UnicodeError:
    pass
    raise ValidationError("Invalid Email format")
    return value
    hxndg
        28
    hxndg  
       2015-10-23 09:18:52 +08:00
    \w+@\w+(\.\w+)*\.[com|cn|net|us]
    hxndg
        29
    hxndg  
       2015-10-23 09:26:52 +08:00
    leaving the enviroment,all comment is nonesense
    zhhc
        30
    zhhc  
       2015-10-23 09:35:10 +08:00
    你们先试试能否匹配 [email protected] 不是我钻牛角尖
    aksoft
        31
    aksoft  
       2015-10-23 10:27:47 +08:00
    解析 @后面的,匹配有个求用
    18000rpm
        32
    18000rpm  
       2015-11-02 12:31:35 +08:00   1
    小声问一句,
    [com|cn|net|us] 这种是什么用法?看你们全都这么用,我 Google 了半天也没找到这种语法。

    P.S. 我觉得是不是应该用圆括号 (com|cn|net|us)

    @FrankFang128
    @lililqth
    @hxndg
    hxndg
        33
    hxndg  
       2015-11-02 12:56:31 +08:00
    @18000rpm ...嗯,你可以直接搜索正则表达式大括号。用百度
    hxndg
        34
    hxndg  
       2015-11-02 12:57:27 +08:00
    @18000rpm ps 括号一般两个作用,一个是做文本匹配,另一个是调整优先级
    FrankFang128
        35
    FrankFang128  
       2015-11-02 13:17:55 +08:00 via Android
    @18000rpm 你是对的 我被楼主带沟里了
    hxndg
        36
    hxndg  
       2015-11-02 19:11:06 +08:00
    @18000rpm sorry ,又想了一下,错了。应该是整体的备选。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2983 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 13:26 PVG 21:26 LAX 06:26 JFK 09:26
    Do have faith in what you're doing.
    ubao 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