我知道之前有过很多次询问,但我没有发现任何真正符合电子邮件地址必须满足的条件才能被视为有效的内容。
将以下内容视为电子邮件地址的结构:
part1@part2.part3.part4
part1的用户名=
2部分=域
part3和part4 =顶级域名
这些都是必须满足的条件:
这是我目前使用的正则表达式:
^([\w\.\-]+)@([\w\-]+)((\.(\w){2,9})+)$
但它不符合条件:4,5,6,7和8
我只想弄清楚如何补充我的正则表达式并在此过程中学习。
以下是无效电子邮件列表
mkyong - 必须包含“@”符号
mkyong123 @ .com - 域名不能以点“。”开头。
mkyong()* @ gmail.com - 电子邮件只允许使用字符,数字,下划线和短划线
mkyong @%*。com - email的tld只允许使用字符和数字
mkyong..2002 @ gmail.com - 双点“。”不允许
mkyong。@ gmail.com - 电子邮件的最后一个字符不能以点“。”结束。
mkyong @mkyong @ gmail.com - 双重“@”不允许
mkyong@gmail.com.1a -email的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
答案 0 :(得分:3)
根据您的有效和无效电子邮件地址列表,这是我能够做的最好的事情:
^([\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})$
答案 1 :(得分:2)
电子邮件地址不得接受空格
不,"this is"@a-valid-e-mail-address.com
。
只允许使用一个@符号
不,"this@is"@a-valid-e-mail-address.com
。
在符号
之前或之后不能有特殊字符
我不确定这意味着什么,但这可能不是真的。 !#$%&'*+-/=?^_`{}|~@example.org
完全没问题。
域点之前或之后不能有特殊字符(电子邮件地址第2部分后面的点)
does@ţḩıš.çóûñţ
?因为它是有效的电子邮件地址。
您无法在用户名
中连续输入两个或多个点
can(...)too@localhost
Don’t use regular expressions to validate e-mail addresses, please.
答案 2 :(得分:0)
电子邮件地址确实具有可以表示为正则表达式的特定格式。 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,regular expressions don't send emails所示,因此在收到电子邮件并且收件人未收到电子邮件之前,您实际上无法知道它无效。
由于您是以自己的方式调整电子邮件正则表达式,因此它不能正确。它可以满足您使用该格式的要求,但电子邮件是固定格式的,因此只需使用参考文献或简化文件,例如Regular-Expressions页面上列出的文件。否则,这个问题永远无法满足您的确切要求。