日文/中文电子邮件地址?

时间:2011-04-17 15:39:19

标签: php regex unicode

我正在制作一些必须完全unicode的网站。 数据库等正在工作,我只有一些小的逻辑错误。 如果字段有效,我用ajax测试我的注册表单,在电子邮件字段中我用正则表达式检查。

但是,如果用户拥有像日本人@日人日本人.com这样的电子邮件地址,那么它就不会出现。

  1. 这种类型的邮件地址是否存在?
  2. 电子邮件地址总是这样吗? (a-z A-Z 0-9) @ (a-z A-Z 0-9)。(a-z A-Z 0-9)

5 个答案:

答案 0 :(得分:6)

根据RFC 5322(“Internet邮件格式”),第3.4.1节(“地址规范”),您不能使用非US-ASCII字符,例如您列出的字符。但是,字符如......

! # $ % & ' * + - / = ? ^ _  { | } ~
只要连续只有一个,

......是合法的,也可以是句号/句号。

有关详细信息,请参阅上面的RFC和the Wikipedia article on email addresses,特别是“语法”部分。

<强>更新

还有一个较新的,虽然是实验性的RFC 5336(现已被RFC6531淘汰),它处理包含UTF-8字符等的现在合法的国际域名。

答案 1 :(得分:5)

当您尝试匹配/验证正则表达式上的电子邮件地址时,您必须非常小心。在某些情况下,您拒绝有效的电子邮件地址。基本上它的:

  

向我展示一个正则表达式,我向您显示一封不匹配的电子邮件。

出于这个原因,如果我检查电子邮件地址,我使用一个非常简单的正则表达式,如.+@.+(\..+)*(用户部分任何东西,主机部分至少有一个点)。任何其他因素都会导致误报和漏报。

最好不要匹配电子邮件地址(只检查“@”之类的琐碎内容),而是发送选择加入电子邮件。

答案 2 :(得分:3)

通常地址的格式为

[_a-zA-Z0-9]+(\.[_a-zA-Z0-9]+)*@[_a-zA-Z0-9]+(\.[_a-zA-Z0-9]+)+
换句话说就是{{1>} \w+(\.\w+)*@\w+(\.\w+)+。此网站还提供有关电子邮件地址模式的有用信息:

http://www.regular-expressions.info/email.html

答案 3 :(得分:0)

似乎没有多少人提到存在问题。在我之前的人已经给出了漂亮的正则表达式,所以我不会重复这些。

我对日语方面的了解不多,但至少作为一名使用中文用于主要互联网浏览语言的母语人士,我从未见过中文的电子邮件地址。曾经有一段时间有汉字的域名很受欢迎。但我相信这是在DNS方面完成的,这是一个商业泡沫。现在你很少见到具有中文字符的域名了。电子邮件地址也是如此。

答案 4 :(得分:0)

距离最初的问题已经过去了很多年。如果您想要复制粘贴并实际工作良好的答案,请使用此处提供的一个https://emailregex.com/ 它处理许多边缘情况,也有一些不处理。如果要捕获所有边缘情况,例如完全有效的 "@v@"@example.com,则需要使正则表达式更长。在我的 C++ 代码中从上面的网站获取的正则表达式示例如下所示:

std::regex(
             "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/"
             "=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-"
             "\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:"
             "(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-"
             "z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:"
             "25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:["
             "\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\["
             "\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])",
             std::regex::nosubs | std::regex::ECMAScript | std::regex::icase)