Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 电子邮件地址的域部分中的有效字符是什么? 意图_Validation_Email_Rfc822 - Fatal编程技术网

Validation 电子邮件地址的域部分中的有效字符是什么? 意图

Validation 电子邮件地址的域部分中的有效字符是什么? 意图,validation,email,rfc822,Validation,Email,Rfc822,我正在尝试对电子邮件地址进行一些非常小的验证,尽管看到很多建议不要这样做。我这样做的原因是我正在实施的规范要求电子邮件地址采用以下格式: mailto:@ 我想简单地将开头的mailto:和最后的@分开,并假设“本地部分”在这两者之间。我将验证“本地部分”是否是URI编码的 我不想做更多的事情,规范允许我对大部分内容进行“尽力”验证,但在URI编码和mailto:前缀方面非常具体 问题 从我所读到的一切来看,在@上拆分对我来说似乎有风险 我在网上和堆栈溢出答案上看到了很多相互矛盾的建议,其中大多

我正在尝试对电子邮件地址进行一些非常小的验证,尽管看到很多建议不要这样做。我这样做的原因是我正在实施的规范要求电子邮件地址采用以下格式:

mailto:@

我想简单地将开头的
mailto:
和最后的
@
分开,并假设“本地部分”在这两者之间。我将验证“本地部分”是否是URI编码的

我不想做更多的事情,规范允许我对大部分内容进行“尽力”验证,但在URI编码和
mailto:
前缀方面非常具体

问题 从我所读到的一切来看,在
@
上拆分对我来说似乎有风险

我在网上和堆栈溢出答案上看到了很多相互矛盾的建议,其中大多数是“阅读RFC”,有些是说域部分只能是某些字符,即
1-9
a-z
a-z
-.,可能还有几个其他字符,但不超过这个。例如:

当我阅读域名上的各种RFC时,我看到or是允许的,这意味着
@
符号是允许的。这一点更加复杂,因为其中包括
@

,但似乎允许更多字符


我是否误解了RFC,或者我遗漏了什么内容,不允许在电子邮件地址的域部分使用
@
?“域文字”语法是我不必担心的吗?

互联网上最新的电子邮件RFC是,它专门针对地址

addr-spec       =   local-part "@" domain
local-part      =   dot-atom / quoted-string / obs-local-part
点原子是规范中定义的一组高度受限的字符。但是,
带引号的字符串
可能会遇到麻烦。它不常被使用,但考虑到你可能会遇到它,你很可能会在引号中得到一些东西,它本身可能包含一个
@
字符

但是,如果您从最后一个
@
中拆分字符串,您应该已经安全地找到了
本地部分
,这在规范中就如何验证它进行了明确定义

随之而来的问题是,几乎任何Unicode字符都可以映射到有效的DNS名称中。如果前端系统能够理解和解释punycode,那么您必须处理几乎所有包含有效unicode字符的内容。如果您知道不打算使用punycode,那么可以使用更严格的集合,通常是字母、数字和连字符

引用已故伟大的乔恩·波斯特尔的话: TCP实现应该遵循健壮性的一般原则:做事要保守,接受别人的意见要自由

本地部分的旁注:
当然要记住,互联网上可能有很多系统不需要严格遵守规范,因此,由于长期以来的自由接受/保守传输理念,可能允许规范之外的东西工作。

请注意,提交
mailto:…
代码中嵌入的行有一个bug,因此,请忽略描述输入格式的代码行中的空格。请看-这是我最关心的
@
上的域部分和拆分,尽管感谢您的反馈和警告:)昨晚睡眠太少。让我稍微强调一下您实际要求的内容…结束-但我在阅读RFC5322时说,在似乎包含
@
符号的范围内,允许任何支持“域文字”形式的内容。我希望我只是误会了:)这就是为什么我把关于punycode的部分放在那里的部分原因。理论上,几乎所有内容(包括非ascii)在RFC5322中都作为域有效。但是,当邮件发送到邮件程序时,它必须被转换为对DNS有效的内容。所以,基本上,这取决于你想要验证什么,以及你想要多大程度的宽容,这就是为什么大多数人不做太多验证的原因。我可能会放弃,只需查看
^mailto:
和任何
@
:)谢谢,干杯!