首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Javascript和PHP中验证非英语(UTF-8)编码的电子邮件地址?

问如何在Javascript和PHP中验证非英语(UTF-8)编码的电子邮件地址?
EN

Stack Overflow用户
提问于 2011-03-07 20:41:47
回答 7查看 12.3K关注 0票数 11

我目前正在工作的一个网站的一部分包含注册过程中,用户必须提供他们的电子邮件地址。就在最近,我意识到基于非ascii的域名是可能的(电子邮件也是如此)。我的后端是utf-8编码的MySQL,我希望任何用户(与不同的地区)应该能够输入他们的电子邮件,但不知道如何验证这种电子邮件地址。

目前我正在测试jquery工具,它可以正确地验证英文电子邮件地址,但无法验证非ascii电子邮件。我也需要在服务器端用php做同样的事情。有没有一个正则表达式可以验证这种电子邮件地址?

我已经尝试过了,但在jquery工具中失败了(这只是演示的例子,我也不明白)

闪闪发光@闪闪发光.com

还有什么会发生,当他们键入他们的英文电子邮件地址(jonesmith@somemail.com)与他们自己的输入法。这是否可以用当前的正则表达式来验证,我们有英文邮件验证。目前,我不必担心那封电子邮件是否存在。

谢谢

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-03-07 20:52:13

尝试验证电子邮件地址可能不是一个好主意。规范(RFC5321,RFC5322)允许如此多的灵活性,以至于使用正则表达式验证它们实际上是不可能的,并且使用函数验证是大量的工作。其结果是,大多数电子邮件验证方案最终拒绝了大量有效的电子邮件地址,这给用户带来了很大的不便。(到目前为止,最常见的示例是不允许使用+字符。)

用户更有可能(意外或故意)输入错误的电子邮件地址,而不是输入无效的电子邮件地址,因此实际上验证是一项大量的工作,但好处很少,如果您输入错误,可能会付出代价。

我建议您只检查客户端上是否存在@字符,然后发送确认电子邮件进行验证;这是最实用的验证方法,它也会确认地址是否正确。

票数 14
EN

Stack Overflow用户

发布于 2011-03-07 21:15:09

从5.2PHP开始就有了build in validation for email addresses。但我不确定它是否适用于UFT-8编码的字符串:

代码语言:javascript
复制
echo filter_var($email, FILTER_VALIDATE_EMAIL);

在original PHP source code中,你可以找到用于验证电子邮件的reg exp,当使用PHP < 5.2时,它可以用于手动验证。

更新

idn_to_ascii()可用于“将域名转换为IDNA ASCII格式”。然后可以使用filter_var($email, FILTER_VALIDATE_EMAIL);进行验证

代码语言:javascript
复制
// International domains
if (function_exists('idn_to_ascii') && strpos($email, '@') !== false) {
    $parts = explode('@', $email);
    $email = $parts[0].'@'.idn_to_ascii($parts[1]);
}
$is_valid = filter_var($email, FILTER_VALIDATE_EMAIL);
票数 3
EN

Stack Overflow用户

发布于 2014-01-08 18:01:18

正如Mario提供的,我尝试了一下,我想出了以下正则表达式来验证非标准电子邮件地址:

代码语言:javascript
复制
^([\p{L}\_\.\-\d]+)@([\p{L}\-\.\d]+)((\.(\p{L}){2,63})+)$

它将验证所有类型的Unicode字母的任何适当的电子邮件地址,TLD限制为2到63个字符。

请检查一下,如果有任何瑕疵,请告诉我。

Example Online

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5219848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档