我并不是在询问完整的电子邮件验证。
我只想知道电子邮件地址的用户名和服务器部分允许使用哪些字符。这可能过于简单化,也许电子邮件地址可以采取其他形式,但我不在乎。我只问这个简单的表格:user-name@server(例如。wild.wezyr@best-server-ever.com)以及两部分中允许的字符。
我并不是在询问完整的电子邮件验证。
我只想知道电子邮件地址的用户名和服务器部分允许使用哪些字符。这可能过于简单化,也许电子邮件地址可以采取其他形式,但我不在乎。我只问这个简单的表格:user-name@server(例如。wild.wezyr@best-server-ever.com)以及两部分中允许的字符。
当前回答
简单的答案是有两个答案。你应该做什么有一个标准。对于你应该接受而不制造麻烦的行为,还有一个(更广泛的)标准。这种双重性适用于发送和接收电子邮件,但在生活中有着广泛的应用。
为您创建的地址提供良好的指南;参见:https://www.jochentopf.com/email/chars.html
要过滤有效的电子邮件,只需传递任何足以理解的信息,以查看下一步。或者开始阅读一堆RFC,小心,这里有龙。
其他回答
检查@和。然后发送电子邮件让他们验证。
我仍然不能在互联网上20%的网站上使用我的.name电子邮件地址,因为有人搞砸了他们的电子邮件验证,或者因为它早于新地址的有效期。
在我的PHP中,我使用此检查
<?php
if (preg_match(
'/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/',
"tim'qqq@gmail.com"
)){
echo "legit email";
} else {
echo "NOT legit email";
}
?>
自己试试看http://phpfiddle.org/main/code/9av6-d10r
许多人已经试图回答这个问题。许多人也表示,许多答案已经过时。这是我的答案,就2022年的情况而言。
这个问题的答案显然不像提出的那么简单。当涉及到邮箱名称的命名时,所提出的标准(具体来说,在本文中为<用户名>),以及对这些RFC的解释非常多。
对于<用户名>部分,通用验收指导小组在这里的一个名为UASG-028的文档中提出了一个详细的指南,说明了电子邮件ID本地部分的组成。
对于<server>部分,此处提到的所有字符“应用程序的Unicode代码点和国际化域名(IDNA)”的字符状态为“PVALID”。此外,状态为“CONTEXTJ”和“CONTEXTO”的字符在某些上下文条件下有效。
简单的答案是有两个答案。你应该做什么有一个标准。对于你应该接受而不制造麻烦的行为,还有一个(更广泛的)标准。这种双重性适用于发送和接收电子邮件,但在生活中有着广泛的应用。
为您创建的地址提供良好的指南;参见:https://www.jochentopf.com/email/chars.html
要过滤有效的电子邮件,只需传递任何足以理解的信息,以查看下一步。或者开始阅读一堆RFC,小心,这里有龙。
请参阅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字符:大写和小写拉丁字母A至Z和A至Z;数字0至9;特殊字符!#$%&'*+-/=^_`{|}~;点前提是除非被引用,否则它不是第一个或最后一个字符,并且除非被引用(例如。John..Doe@example.com不允许,但允许使用“John…Doe”@example.com);空格和“(),:;<>@[\]字符允许有限制(它们只允许在带引号的字符串中,如下面的段落所述,此外,反斜杠或双引号前面必须有反斜杠);注释允许在本地部分的两端加括号;例如john.smith(注释)@example.com和(注释)john.smith@example.com都相当于john.smith@example.com.
除ASCII字符外,截至2012年,您可以使用U+007F以上的国际字符,如RFC 6532规范所述,编码为UTF-8,并在维基百科上进行了解释。请注意,截至2019年,这些标准仍标记为“建议”,但正在缓慢推出。此规范中的更改基本上添加了国际字符作为有效的字母数字字符(atext),而不影响对允许和限制的特殊字符(如!#)的规则和@:。
有关验证,请参阅使用正则表达式验证电子邮件地址。
域部分定义如下:
协议的Internet标准(征求意见)要求组件主机名标签只能包含ASCII字母a到z(不区分大小写)、数字0到9和连字符(-)。RFC 952中主机名的原始规范规定,标签不能以数字或连字符开头,也不能以连字符结尾。然而,随后的规范(RFC 1123)允许主机名标签以数字开头。不允许使用其他符号、标点符号或空格。