我正在制作一些必须完全unicode的网站。 数据库等正在工作,我只有一些小的逻辑错误。 如果字段有效,我用ajax测试我的注册表单,在电子邮件字段中我用正则表达式检查。
但是,如果用户拥有像日本人@日人日本人.com这样的电子邮件地址,那么它就不会出现。
电子邮件地址总是这样吗? (a-z A-Z 0-9) @ (a-z A-Z 0-9)。(a-z A-Z 0-9)
答案 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+)+
。此网站还提供有关电子邮件地址模式的有用信息:
答案 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)