我正在使用Django建立网站。该网站可能会有来自非英语国家的大量用户。

我只想知道有关电子邮件地址可能包含哪些类型的字符的技术限制。

是电子邮件地址仅允许包含英文字母,数字, _, @.?

他们是否允许包含非英语字母 é 或者 ü?

他们是否可以包含中文或日语或其他Unicode字符?

有帮助吗?

解决方案

电子邮件地址 由两个部分组成 local 在 @和 domain 那之后。

这些部分的规则不同:

为了 local part 您可以使用ASCII:

  • 拉丁字母A -z a -z
  • 数字0-9
  • 特殊字符!#$%&'*+ - /=?^_` {|}〜
  • 点,不是第一个或最后一个,也不是顺序
  • space和“(),:; <>@[]允许有限制(仅在引用的字符串中,后斜切或双引号都允许它们在后面倾斜之前)
  • 自2012年以来 您可以使用国际 上面的字符 U+007F, ,编码 作为UTF-8.

Domain part 更受限制:

  • 拉丁字母A -z a -z
  • 数字0-9
  • 连字符 - 这不是第一或最后,允许序列的多个连字符。

正则验证

^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})

希望这能节省一些时间。

其他提示

嗯,是。阅读(至少) 这个 Wikipedia的文章。

我住在阿根廷,这里允许在诸如ñoñó1234@server.com之类的电子邮件中

电子邮件地址中的允许语法在 RFC 3696, ,并且非常参与。

确切的规则[本地部分; “@”]之前的零件是,任何ASCII字符(包括控制字符)都可能出现在引用或引用字符串中。当需要引用时,使用后斜切字符引用以下字符
[...]
如果没有引号,本地部分可能包括字母字符,数字或任何特殊字符的任何组合! #$%&' * + - / =? ^ _`。 {| }〜
[...]
DNS名称允许使用任何字符或位的组合(作为八位字)。但是,大多数应用程序都需要一个首选的表格...

...等等,深入。

与其担心哪些电子邮件地址可以和您真正不在乎的地址无法包含哪些,不如测试您的设置是否可以向他们发送电子邮件,而是您真正关心的!这意味着实际发送验证电子邮件。

否则,您将无法捕获更常见的意外错别字案例,这些案例留在您设计的任何角色中。 (快速:andural@mydomain.com是否在您的网站上使用一个有效的地址?您仍然无法处理某些地址(这是必要的疏远),因为其他答案说:电子邮件地址处理并不小;但这是他们需要找出是否要为您提供电子邮件地址的东西!

您要检查的只是用户在 @之前提供一些文本,其后一些文本,并且地址不会长时间(例如1000个字符)。如果您想提供警告(“这看起来像是麻烦!是否有错别字?继续进行仔细检查”),这很好,但是它不应该阻止附加email-address进程。

当然,如果您不在乎给他们发送电子邮件,那就拿走他们输入的所有内容。例如,地址可能仅用于 Gravatar, ,但Gravatar无论如何都会验证所有电子邮件地址。

如本RFC所示,有可能有非ASCII电子邮件地址: http://tools.ietf.org/html/rfc3490 但是我认为,这并非所有国家都设定了这一点,而且我了解每个国家只允许使用一种语言代码,并且也有一种将其转变为ASCII的方法,但这并不是一个琐碎的问题。

我遇到了带有单个报价的电子邮件地址,也不经常遇到。我们拒绝空格(尽管严格来说允许它是允许的),总共超过五个字符的字符串不止一个“@”标志和地址字符串。我相信这可以解决比造成的问题更多的问题,到目前为止,十多年的地址却拒绝了许多垃圾地址。此外,还有一个触发器可以触发插入或更新时的所有电子邮件地址。

话虽如此,如果没有向所有者进行往返的情况,就不可能验证电子邮件,但至少我们可以拒绝非常可疑的数据。

建立 @Matas Vaitkevicius'答案:我已经在Python中修复了更多的正则态度,以使其匹配有效的电子邮件地址 这一页这一页 Wikipedia,使用那个很棒的Regex101网站: https://regex101.com/r/up2ol7/26

希望这对某人有帮助!:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top