电子邮件地址是否允许包含非字母数字字符?
我正在用Djangobuild立一个网站。 该网站可能有来自非英语国家的重要用户。
我只想知道电子邮件地址可能包含的字符types是否有任何技术限制。
电子邮件地址是否只允许包含英文字母,数字,“_”,“@”和“。”?
是否允许包含“é”或“ü”等非英文字母?
他们是否允许包含中文或日文或其他Unicode字符?
电子邮件地址由 @之前的local
和domain
。
这些部分的规则是不同的:
对于local part
你可以使用ASCII:
- 拉丁字母A – Z a – z
- 数字0 – 9
- 特殊字符!#$%&'* + – / =?^ _`{|}〜
- 不是第一个也不是最后一个,而不是顺序
- 空格和“(),:; <> @ []字符是允许的限制(它们只允许在引用string内,反斜线或双引号前面必须加反斜杠)
- 另外,自2012年以来,您可以使用
U+007F
以上的国际字符 ,编码为UTF-8 。
Domain part
更受限制:
- 拉丁字母A – Z a – z
- 数字0 – 9
- 连字符 – 不是第一个或最后一个,允许连续多个连字符。
正则expression式来validation
^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})
希望这可以为你节省一些时间。
嗯,是。 阅读(至less) 这篇文章从维基百科。
我住在阿根廷,在这里可以发邮件到ñoñó1234@server.com
RFC 3696中描述了电子邮件地址中允许的语法,并且涉及很多。
确切的规则[本地部分; '@']之前的部分是任何ASCII字符,包括控制字符,都可能会出现引号或用引号引起来的string。 当需要引用时,反斜杠字符用于引用以下字符
[…]
没有引号,本地部分可能由字母,数字或任何特殊字符的任意组合组成! #$%&'* + – / =? ^ _`。 {| }〜
[…]
在DNS名称中允许任何字符或位组合(如八位字节)。 但是,大多数应用程序都需要一个首选表单。
…等等,在一定的深度。
不要担心哪些电子邮件地址可以包含,也不能包含什么,你真的不关心,testing你的设置是否可以给他们发送电子邮件 – 这是你真正关心的! 这意味着实际上发送validation邮件。
否则,你不能find一个更常见的意外错别字的情况下,你留在你devise的任何字符集。 (快速:是random@mydomain.com是我的一个有效地址在你的网站上使用,还是不?)它也避免了当你告诉他们他们的完全有效和正确的地址是错误的,不必要地和无偿地疏远任何用户。 你仍然可能无法处理一些地址(这是必要的异化),因为其他答案说:电子邮件地址处理不是微不足道的; 但是这是他们需要找出他们是否想给你一个电子邮件地址!
所有你应该检查的是,用户在@之前提供一些文本,在它之后的一些文本,并且地址不是漫长的(例如1000个字符)。 如果你想提供一个警告(“这看起来像麻烦!是否有一个错字?在继续之前的双重检查”),这很好,但它不应该阻止添加电子邮件地址的过程。
当然,如果你不在乎给他们发电子邮件,那就把他们input的东西拿走吧。 例如,该地址可能仅用于Gravatar ,但Gravatar无论如何都会validation所有电子邮件地址。
有一个非ASCII的电子邮件地址的可能性,如本RFC: http : //tools.ietf.org/html/rfc3490所示,但我认为这并没有为所有国家设置,从我所了解的只有一个语言代码将被允许为每个国家,也有办法把它变成ASCII,但这并不是一个微不足道的问题。
我遇到过使用单引号的电子邮件地址,而且也不常使用。 我们拒绝空格(尽pipe严格来说是允许的),多个“@”符号和总共less于五个字符的地址string。 我相信这解决了比创build更多的问题,到目前为止,已经有超过十年的时间,几十万个地址,它拒绝了许多垃圾地址。 还有一个触发器,可以在插入或更新时减less所有电子邮件地址。
这就是说,要validation电子邮件是不可能的,但是至less我们可以拒绝非常怀疑的数据。