正则表达式:仅允许域和顶级域中间有连字符的电子邮件验证

Axe*_*xel 1 javascript regex email

我知道这个问题以前被问过很多次,但我还没有找到任何真正满足电子邮件地址必须满足的所有条件才能被视为有效的内容。

\n

考虑以下作为电子邮件地址的结构:

\n
part1@part2.part3.part4\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • 第 1 部分=用户名

    \n
  • \n
  • 第2部分=域

    \n
  • \n
  • 第3部分和第4部分=顶级域

    \n
  • \n
\n

这些是必须满足的所有条件:

\n
    \n
  1. 电子邮件地址不得接受空格
  2. \n
  3. 电子邮件地址不得以点或字母或数字以外的字符结尾
  4. \n
  5. 只允许有一个@符号
  6. \n
  7. at 符号前后不能有特殊字符
  8. \n
  9. 域名点(电子邮件地址第二部分之后的点)前后不能有特殊字符
  10. \n
  11. 您不能在用户名中连续输入两个或多个点
  12. \n
  13. 在域中,@和点之间,@和点旁边的字符必须是字母或数字,中间唯一允许的特殊字符是连字符。
  14. \n
  15. 步骤 7 中的操作同样适用于顶级域(第 3 部分和第 4 部分或电子邮件)
  16. \n
\n

这是我当前使用的正则表达式:

\n
^([\\w\\.\\-]+)@([\\w\\-]+)((\\.(\\w){2,9})+)$\n
Run Code Online (Sandbox Code Playgroud)\n

但不满足条件:4、5、6、7和8

\n

我只是想弄清楚如何补充我的正则表达式并在这个过程中学习。

\n

编辑

\n

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

\n

这是无效电子邮件的列表

\n

mkyong \xe2\x80\x93 必须包含 \xe2\x80\x9c@\xe2\x80\x9d 符号

\n

mkyong123@.com \xe2\x80\x93 域不能以点 \xe2\x80\x9c.\xe2\x80\x9d 开头

\n

mkyong()*@gmail.com \xe2\x80\x93 email\xe2\x80\x99s 只允许字符、数字、下划线和破折号

\n

mkyong@%*.com \xe2\x80\x93 email\xe2\x80\x99s tld 只允许字符和数字

\n

mkyong..2002@gmail.com \xe2\x80\x93 双点 \xe2\x80\x9c.\xe2\x80\x9d 不允许

\n

mkyong.@gmail.com \xe2\x80\x93 email\xe2\x80\x99s 最后一个字符不能以点结尾 \xe2\x80\x9c.\xe2\x80\x9d

\n

mkyong@mkyong@gmail.com \xe2\x80\x93 双 \xe2\x80\x9c@\xe2\x80\x9d 不允许

\n

mkyong@gmail.com.1a -email\xe2\x80\x99s tld 有两个字符不能包含数字

\n

有效的:

\n

mkyong@yahoo.com

\n

mkyong-100@yahoo.com

\n

mkyong.100@yahoo.com

\n

mkyong111@mkyong.com

\n

mkyong-100@mkyong.net

\n

mkyong.100@mkyong.com.au

\n

mkyong@1.com

\n

mkyong@gmail.com.com

\n

mkyong-100@yahoo-test.com

\n

ssh*_*124 5

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

\n\n
^([\\w-]|(?<!\\.)\\.)+[a-zA-Z0-9]@[a-zA-Z0-9]([\\w\\-]+)((\\.([a-zA-Z]){2,9})+)$\n
Run Code Online (Sandbox Code Playgroud)\n\n

演示版

\n\n

更新:

\n\n
^([\\w-]|(?<!\\.)\\.)+[a-zA-Z0-9]@[a-zA-Z0-9]([a-zA-Z0-9\\-]+)((\\.([a-zA-Z]){2,9}){0\xe2\x80\x8c\xe2\x80\x8b,2})$\n
Run Code Online (Sandbox Code Playgroud)\n