我不是在询问完整的电子邮件验证。
我只想知道电子邮件地址中允许使用的字符user- name和server部分内容。这可能过于简单,也许电子邮件地址可以采用其他形式,但我不在乎。我只询问这种简单的形式:(user- name@server例如wild.wezyr@best-server-ever.com)和两个部分中允许的字符。
user- name
server
user- name@server
请参阅RFC 5322:Internet 消息格式,以及在较小程度上,RFC 5321:简单邮件传输协议。
RFC 822也涵盖电子邮件地址,但主要处理其结构:
addr-spec = local-part "@" domain ; global address local-part = word *("." word) ; uninterpreted ; case-preserved domain = sub-domain *("." sub-domain) sub-domain = domain-ref / domain-literal domain-ref = atom ; symbolic reference
和往常一样,维基百科有一篇关于电子邮件地址的不错的文章:
电子邮件地址的本地部分可以使用以下任何 ASCII 字符: 大写和小写拉丁字母AtoZ和ato z; 数字0到9; 特殊字符!#$%&'*+-/=?^_~`; dot .,前提是它不是第一个或最后一个字符,除非被引用,并且它不连续出现,除非被引用(例如John..Doe@example.com,不允许但"John..Doe"@example.com被允许); 空格和"(),:;<>@[\]字符是有限制的(它们只允许在带引号的字符串中,如下文所述,此外,反斜杠或双引号必须以反斜杠开头); * 允许在本地部分的任一端带括号的注释;例如john.smith(comment)@example.com和(comment)john.smith@example.com都等价于john.smith@example.com。
电子邮件地址的本地部分可以使用以下任何 ASCII 字符:
A
Z
a
z
0
9
!#$%&'*+-/=?^_
.
John..Doe@example.com
"John..Doe"@example.com
"(),:;<>@[\]
john.smith(comment)@example.com
(comment)john.smith@example.com
john.smith@example.com
除了 ASCII 字符之外,从 2012 年起,您还可以使用上述国际字符 U+007F,编码为 UTF-8,如RFC 6532 规范中所述并在Wikipedia上进行了解释。请注意,截至 2019 年,这些标准仍被标记为已提议,但正在缓慢推出。本规范中的更改实质上将国际字符添加为有效的字母数字字符(atext),而不会影响允许和受限特殊字符(如!#和)的规则@:。
U+007F
!#
@:
有关验证,请参阅使用正则表达式验证电子邮件地址。
该domain部分定义如下:
domain
用于协议的 Internet 标准(征求意见)要求组件主机名标签只能包含 ASCII 字母(a以z不区分大小写的方式)、数字0和9连字符 ( -)。RFC 952中主机名的原始规范要求标签不能以数字或连字符开头,也不能以连字符结尾。但是,后续规范 ( RFC 1123 ) 允许主机名标签以数字开头。不允许使用其他符号、标点符号或空格。
-