我需要知道name-addr电子邮件中()字段的验证/格式规则是什么.在rfc解释了格式name-addr,但详细介绍了display-name.
像这样:
From: John Q. Public <JQP@bar.com>
Run Code Online (Sandbox Code Playgroud)
我想知道允许的字符和长度.我怎么知道它John Q. Public有有效字符?我应该只允许打印的US-ASCII字符吗?
我咨询了RFC 2822,但没有找到显示名称的具体格式
jst*_*ast 20
这是在您在问题中链接到的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
Run Code Online (Sandbox Code Playgroud)
您必须在文档中稍微跳转一下才能找到每种令牌类型的定义,但它们都在那里.
获得定义后,您需要做的就是扫描您的名称字符串,看它是否只包含有效字符.
根据定义,a display-name是a phrase和a phrase是1或更多的word令牌(或者obs-word我现在将忽略以使这种解释更简单).
甲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
Run Code Online (Sandbox Code Playgroud)
基于此,我们可以告诉a "."在引用字符串中是允许的,所以...正确的格式display-name可以是以下任何一种:
From: "John Q. Public" <JQB@bar.com>
Run Code Online (Sandbox Code Playgroud)
要么
From: John "Q." Public <JQB@bar.com>
Run Code Online (Sandbox Code Playgroud)
要么
From: "John Q." Public <JQB@bar.com>
Run Code Online (Sandbox Code Playgroud)
要么
From: John "Q. Public" <JQB@bar.com>
Run Code Online (Sandbox Code Playgroud)
其中任何一个都可以.
| 归档时间: |
|
| 查看次数: |
2905 次 |
| 最近记录: |