Con*_*ion 61 email unicode domain-name internationalization
我正在使用`Django建立一个网站.该网站可能拥有来自非英语国家的重要用户.
我只是想知道电子邮件地址可能包含哪些类型的字符是否存在任何技术限制.
电子邮件地址是否只允许包含英文字母,数字,"_","@"和"."?
是否允许包含"é"或"ü"等非英文字母?
它们是否允许包含中文或日文或其他Unicode字符?
Mat*_*ius 43
电子邮件地址由 local @之前的两部分组成domain.
这些部分的规则是不同的:
因为local part你可以使用ASCII:
U+007F,编码为UTF-8.Domain part 更受限制:
^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})
希望这能为您节省一些时间.
小智 11
您可以测试您的设置是否可以向他们发送电子邮件,而不是担心哪些电子邮件地址可以包含但不包含哪些内容 - 这就是您真正关心的内容!这意味着实际发送验证邮件.
否则,你无法捕捉到一个更常见的意外错别字案例,它保留在你设计的任何字符集中.(快:是random@mydomain.com一个有效的地址,我在您的网站,或不使用?)它也避免了不必要的和无偿疏远任何用户,当你告诉他们,他们完全有效和正确的地址是错误的.您仍然可能无法处理某些地址(这是必要的异化),正如其他答案所说:电子邮件地址处理并非无足轻重; 但是他们需要知道他们是否想要为您提供电子邮件地址!
您应该检查的是,用户在@之前提供了一些文本,在它之后提供了一些文本,并且地址不是很长(比如说1000个字符).如果你想提供一个警告("这看起来很麻烦!是否有拼写错误?在继续之前仔细检查"),这没关系,但它不应该阻止add-email-address进程.
当然,如果您不打算向他们发送电子邮件,那么只需拿走他们输入的内容即可.例如,地址可能仅用于Gravatar,但Gravatar无论如何都会验证所有电子邮件地址.
有可能有非ASCII电子邮件地址,如此RFC所示:http://tools.ietf.org/html/rfc3490但我认为这还没有为所有国家设置,并且从我所理解的只有一个每个国家/地区都允许使用语言代码,还有一种方法可以将其转换为ASCII格式,但这不是一个小问题.