我需要知道电子邮件中(name-addr
)字段的验证/格式规则是什么。
在rfc中解释了name-addr
的格式,但详细介绍了display-name
。
像这样:
From: John Q. Public <JQP@bar.com>
我想知道允许的字符和长度。
我怎么知道John Q. Public
有有效字符?
我应该只允许打印的US-ASCII字符吗?
我咨询了RFC 2822,但没有找到显示名称的具体格式
答案 0 :(得分:19)
这是在您在问题中链接的rfc中定义的(顺便说一句,本文档的较新版本为RFC 5322):
display-name = phrase
phrase = 1*word / obs-phrase
word = atom / quoted-string
atom = [CFWS] 1*atext [CFWS]
atext = ALPHA / DIGIT / ; Any character except controls,
"!" / "#" / ; SP, and specials.
"$" / "%" / ; Used for atoms
"&" / "'" /
"*" / "+" /
"-" / "/" /
"=" / "?" /
"^" / "_" /
"`" / "{" /
"|" / "}" /
"~"
specials = "(" / ")" / ; Special characters used in
"<" / ">" / ; other parts of the syntax
"[" / "]" /
":" / ";" /
"@" / "\" /
"," / "." /
DQUOTE
你必须在文档中跳一下才能找到每种令牌类型的定义,但它们都在那里。
获得定义之后,您需要做的就是扫描您的名称字符串,看它是否只包含有效字符。
根据定义,display-name
是phrase
而phrase
是1或更多word
令牌(或obs-word
我是& #39; ll暂时忽略这个解释更简单。)
word
令牌可以是atom
或quoted-string
。
在您的示例中,John Q. Public
包含special
个字符"."
,该字符不能出现在atom
令牌中。 quoted-string
令牌怎么样?好吧,让我们看看......
quoted-string = [CFWS]
DQUOTE *([FWS] qcontent) [FWS] DQUOTE
[CFWS]
qcontent = qtext / quoted-pair
qtext = NO-WS-CTL / ; Non white space controls
%d33 / ; The rest of the US-ASCII
%d35-91 / ; characters not including "\"
%d93-126 ; or the quote character
基于此,我们可以告诉您在引用字符串中允许"."
,因此...... display-name
的正确格式可以是以下任意格式:
From: "John Q. Public" <JQB@bar.com>
或
From: John "Q." Public <JQB@bar.com>
或
From: "John Q." Public <JQB@bar.com>
或
From: John "Q. Public" <JQB@bar.com>
其中任何一个都可以。