繁体   English   中英

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

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

我知道以前曾被问过很多次,但是我还没有找到真正满足电子邮件地址必须符合的所有条件才能被视为有效的条件。

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

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

  • part2 =域

  • part3和part4 =顶级域

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

  1. 电子邮件地址不得包含空格
  2. 电子邮件地址不得以点号或字母或数字以外的其他字符结尾
  3. 只能使用一个@符号
  4. at符号之前或之后不能有特殊字符
  5. 域点(电子邮件地址的part2之后的点)之前或之后不能有特殊字符
  6. 您不能在用户名中连续输入两个或多个点
  7. 在域中,@和点之间,@和点旁边的字符必须是字母或数字,中间唯一允许使用的特殊字符是连字符。
  8. 顶级域(第3部分和第4部分或电子邮件)在第7步中也是如此

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

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

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

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

编辑

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

这是无效电子邮件的列表

mkyong –必须包含“ @”符号

mkyong123 @ .com –域不能以点“。”开头

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

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

mkyong..2002 @ gmail.com –不允许使用双点“。”

mkyong。@ gmail.com –电子邮件的最后一个字符不能以点“。”结尾

mkyong @ mkyong @ gmail.com –不允许使用双“ @”

mkyong@gmail.com.1a-具有两个字符的电子邮件的tld不能包含数字

有效:

mkyong@yahoo.com

mkyong-100@yahoo.com

mkyong.100@yahoo.com

mkyong111@mkyong.com

mkyong-100@mkyong.net

mkyong.100@mkyong.com.au

mkyong@1.com

mkyong@gmail.com.com

mkyong-100@yahoo-test.com

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

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

演示

更新:

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

电子邮件地址不得包含空格

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

只能使用一个@符号

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

at符号之前或之后不能有特殊字符

我不确定这意味着什么,但这可能不是事实。 !#$%&'*+-/=?^_`{}|~@example.org很好。

域点(电子邮件地址的part2之后的点)之前或之后不能有特殊字符

does@ţḩıš.çóûñţ吗? 因为它是一个有效的电子邮件地址。

您不能在用户名中连续输入两个或多个点

can(...)too@localhost

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

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

(?:[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所指出的, 正则表达式不会发送电子邮件 ,因此您实际上无法知道它是无效的,直到发送电子邮件且收件人未收到它为止。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM