意图
尽管看到很多建议不要这样做,但我正在尝试对电子邮件地址进行一些最小的验证。我这样做的原因是我正在实施的规范要求电子邮件地址采用以下格式:
mailto:<uri-encoded local part>@<domain part>
我想简单地拆分 startmailto:
和 final @
,并假设“本地部分”在这两者之间。我将验证“本地部分”是否经过 URI 编码。
我不想做更多的事情,规范允许我对大部分内容进行“尽力而为”验证,但对 URI 编码和mailto:
前缀非常具体。
问题
从我读过的所有内容来看,分裂对@
我来说似乎有风险。
我在网上和 Stack Overflow 的答案上看到了很多相互矛盾的建议,其中大部分都说“阅读 RFC”,其中一些说域部分只能是某些字符,即1-9
a-z
A-Z
-.
,可能是其他几个字符,但仅此而已。例如:
当我阅读有关域名的各种 RFC 时,我看到“任何 CHAR”(dtext
)或“ASCII 33 到 90 之间的任何字符”(dtext
)都是允许的,这意味着@
允许使用符号。这更加复杂,因为括号中允许使用“注释”,(
)
并且可以包含 ASCII 42 到 91 之间的字符,其中包括@
.
RFC1035 似乎支持字母+数字+破折号+句号的要求,但RFC5322 中的“域文字”语法似乎允许更多字符。
我是否误解了 RFC,或者我是否遗漏了一些不允许@
在电子邮件地址的域中使用的内容?“域文字”语法是我不必担心的吗?