2010-10-02 33 views
47

我正在用`Django构建一个网站。该网站可能会有来自非英语国家的重要用户。允许电子邮件地址包含非字母数字字符吗?

我只想知道是否对电子邮件地址可能包含的字符类型有任何技术限制。

电子邮件地址是否只允许包含英文字母,数字,“_”,“@”和“。”?

是否允许包含“é”或“ü”等非英文字母?

它们是否允许包含中文或日文或其他Unicode字符?

回答

26

电子邮件地址consists of two partslocal @和domain之后。

规则,这些部分是不同的:

对于local part您可以使用ASCII:

  • 拉丁字母A - Z A - Z
  • 数字0 - 9
  • 特殊字符#! $%&'* + -/=?^ _`{|}〜
  • 点,它不是第一个或最后一个,也不是顺序的
  • 空间和“(),:; <> @ []字符有限制的允许(只允许他们带引号的字符串内,反斜线或双引号必须由一个反斜杠)
  • Plus since 2012可以使用国际characters aboveU+007F,编码as UTF-8

Domain part更加有限:

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

Regex to validate

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

希望这可以节省一些时间。

+0

这些“域部分”限制的应用在哪里? '拉丁字母A - Z a - z' '数字0 - 9' – user3175580 2017-05-10 01:21:30

+0

只要在这里添加@ matas-vaitkevicius,RFC 6531是**提议的**标准。目前还不是一个完整的标准。 – 2017-05-21 22:32:04

+0

正则表达式不能在JAVA中工作; pattern = Pattern.compile(“^(([^ <>()\ [\] \。,;:\ s @ \”] +(\。[^​​ <>()\ [\] \。 。\ S @ \ “] +)*)|(\” + \ “))@(([^ <>()[\] \;:\ S @ \”] + \)+ [^ <>()[\] \。,;:\ s @ \“] {2,})”,Pattern.CASE_INSENSITIVE); – Furkan 2017-07-04 13:39:05

35

嗯,是的。阅读(至少)维基百科的文章this

我住在阿根廷,这里是允许的邮件像ñoñó[email protected]

+9

您的示例字符位于latin1集中,并且不需要完整的unicode。 – Bryce 2014-01-17 00:21:41

+4

我无法找到允许此类电子邮件地址的服务,您能指出一个吗? – theCakeCoder 2014-07-02 14:40:02

+0

@ eKek0,这些电子邮件地址是否通用?制定禁用非ASCII电子邮件地址的政策会很好吗? – Pacerier 2014-12-10 07:07:33

4

有一种可能性,以具有非ASCII电子邮件地址,见下面的RFC:http://tools.ietf.org/html/rfc3490,但我觉得这还没有确定对于所有国家而言,从我所了解的情况来看,每个国家/地区只允许使用一种语言代码,并且还有一种方法可以将其转换为ASCII码,但这并不是一个微不足道的问题。

17

电子邮件地址中允许的语法在RFC 3696中描述,并且涉及很多。

准确的规则[for local part; '@']之前的部分是任何ASCII字符,包括控制 字符,都可能出现引号或用引号引起来的字符串。当报价 需要,反斜杠字符用于引用以下 字符
[...]
没有引号,本地部分可能包括 字母,数字任意组合,或任何特殊字符 ! #$%&'* + -/=?^_`。 {| }〜
[...]
任何字符,或比特的组合(如字节),被允许在 DNS名称。然而, 大多数应用需要一种优选形式...

...等等,在一定的深度。

9

不要去担心什么电子邮件地址,不能含有,而你也不在乎,测试您的设置是否可以向他们发送电子邮件或不,这是你真正关心的!这意味着实际上会发送验证邮件。

否则,你不能捕获一个更常见的意外错别字,它会停留在你设计的任何字符集内。 (快速:是[email protected]是我在您的网站上使用的有效地址,还是不是?)当您告诉他们他们的完全有效且正确的地址是错误的时候,它还避免了不必要的和无偿地疏远任何用户。您仍然可能无法处理某些地址(这是必要的异化),因为其他答案说:电子邮件地址处理并非微不足道;但是这是他们需要查明他们是否想给你一个电子邮件地址!

你应该检查的是,用户在@之前提供了一些文本,之后有一些文本,并且地址不是非常漫长(比如说1000个字符)。如果你想提供一个警告(“这看起来很麻烦!是否有错字?在继续之前再次检查”),这很好,但它不应该阻止添加电子邮件地址过程。

当然,如果你不在乎给他们发电子邮件,那么只要他们输入。例如,该地址可能仅用于Gravatar,但Gravatar无论如何都会验证所有电子邮件地址。

+17

告诉人们他们做什么,不关心什么是冒昧的。 (例如,由于电子邮件地址通常不区分大小写,因此知道您是需要处理Unicode还是仅处理ASCII是很重要的。) – 2013-07-24 14:25:10

2

我遇到过带单引号的电子邮件地址,而且也不常见。我们拒绝空格(尽管严格来说它是允许的),多个'@'符号和地址字符串总共少于5个字符。我相信这解决了比创建更多的问题,并且到目前为止已经有超过十年和几十万个地址,它拒绝了许多垃圾地址。还有一个触发器可以在插入或更新时降低所有电子邮件地址。

这就是说,要验证一封电子邮件是不可能的,而不是往返所有者,但至少我们可以拒绝非常可疑的数据。

+0

电子邮件地址(用户部分....)可以区分大小写....(建议它们不是,见[RFC5321](https://tools.ietf.org/html/rfc5321)第2.4节)你不应该改变收到的地址的情况....(当用作用户名时,它虽然......)(技术上[email protected]和[email protected]可以是不同的用户......)(我知道几年前一个邮件系统需要匹配的情况(例如[email protected]工作,[email protected]没有)电子邮件到达最终用户......) – 2017-07-18 08:03:00

相关问题