关于javascript:正则表达式:电子邮件验证,只允许在域和顶级域中间使用连字符

Regex: Email validation that allows only hyphens in the middle of the domain and top-level domain

我知道以前有很多人问过这个问题,但我还没有找到真正符合所有条件的邮件地址必须符合被认为有效。

将以下内容视为电子邮件地址的结构:

1
part1@part2.part3.part4
  • part1=用户名

  • 第2部分=域

  • part3和part4=顶级域

这些都是必须满足的条件:

  • 电子邮件地址不能接受空格
  • 电子邮件地址不得以除字母或数字之外的点或字符结尾。
  • 只允许使用一个@符号
  • AT标志前后不能有特殊字符
  • 域点之前或之后不能有特殊字符(电子邮件地址第2部分后的点)
  • 不能在用户名的一行中输入两个或多个点。
  • 在域中,@和点之间,@和点旁边的字符必须是字母或数字,中间唯一允许的特殊字符是连字符。
  • 对于顶级域(第3部分和第4部分或电子邮件),步骤7中的情况也一样。
  • 这是我当前使用的正则表达式:

    1
    ^([\w\.\-]+)@([\w\-]+)((\.(\w){2,9})+)$

    但不符合条件:4、5、6、7和8

    我只是想知道如何补充我的正则表达式,并在此过程中学习。

    编辑电子邮件地址中唯一允许的特殊字符是:点、连字符、下划线和at符号

    这是无效电子邮件的列表

    mkyong–必须包含"@"符号

    [email protected]–域不能以点""开头。

    mkyong()*@gmail.com–电子邮件只允许使用字符、数字、下划线和破折号

    mkyong@%*.com–电子邮件的tld仅允许字符和数字

    [email protected]–不允许使用双点"."

    [email protected]–电子邮件的最后一个字符不能以点结尾。

    mkyong@[email protected]–不允许使用双"@"

    [email protected]包含两个字符的电子邮件TLD不能包含数字

    有效的:

    [email protected]网站

    [email protected]

    [email protected]

    [email protected]

    [email protected]

    [email protected]

    [email protected]网站

    [email protected]

    [email protected]网站


    根据您的有效和无效电子邮件地址列表,这是我所能做到的最好的:

    1
    ^([\w-]|(?<!\.)\.)+[a-zA-Z0-9]@[a-zA-Z0-9]([\w\-]+)((\.([a-zA-Z]){2,9})+)$

    演示

    更新时间:

    1
    ^([\w-]|(?<!\.)\.)+[a-zA-Z0-9]@[a-zA-Z0-9]([a-zA-Z0-9\-]+)((\.([a-zA-Z]){2,9}){0??,2})$


    An email address must not accept white spaces

    不,"this is"@a-valid-e-mail-address.com

    Only one @ sign is allowed

    不,"this@is"@a-valid-e-mail-address.com

    There can not be a special character before or after the at sign

    我不知道这是什么意思,但可能不是真的。!#$%&'*+-/=?^_`{}|[email protected]非常好。

    There can not be a special character before or after the domain dot (the dot after part2 of the email address)

    does@????.?ó????因为它是一个有效的电子邮件地址。

    You can not enter two or more dots in a row in the username

    江户十一〔四〕号

    请不要使用正则表达式验证电子邮件地址。


    电子邮件地址确实具有特定的格式,可以表示为正则表达式。RFC5322的官方格式为:

    1
    (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]      |  \\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@ (?:(?:a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?  |  \[(?:(?:25[0-5]|2[0-]0-9]|[01]?[0-9][0-9]?)\.){3}       (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-]:          ?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

    正如Jan Goyvaerts所指出的,正则表达式不发送电子邮件,因此在收件人发送和接收电子邮件之前,您实际上无法知道它是无效的。

    由于您以自己的方式调整了电子邮件正则表达式,所以这并不正确。它可能会回答您使用该格式的要求,但电子邮件是固定格式,因此只使用参考格式,或简化格式,如正则表达式页面上列出的格式。否则,这个问题将永远无法满足您的具体要求。