我目前正在工作的一个网站的一部分包含注册过程中,用户必须提供他们的电子邮件地址。就在最近,我意识到基于非ascii的域名是可能的(电子邮件也是如此)。我的后端是utf-8编码的MySQL,我希望任何用户(与不同的地区)应该能够输入他们的电子邮件,但不知道如何验证这种电子邮件地址。
目前我正在测试jquery工具,它可以正确地验证英文电子邮件地址,但无法验证非ascii电子邮件。我也需要在服务器端用php做同样的事情。有没有一个正则表达式可以验证这种电子邮件地址?
我已经尝试过了,但在jquery工具中失败了(这只是演示的例子,我也不明白)
闪闪发光@闪闪发光.com
还有什么会发生,当他们键入他们的英文电子邮件地址(jonesmith@somemail.com)与他们自己的输入法。这是否可以用当前的正则表达式来验证,我们有英文邮件验证。目前,我不必担心那封电子邮件是否存在。
谢谢
发布于 2011-03-07 20:52:13
发布于 2011-03-07 21:15:09
从5.2PHP开始就有了build in validation for email addresses。但我不确定它是否适用于UFT-8编码的字符串:
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);进行验证
// 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);发布于 2014-01-08 18:01:18
正如Mario提供的,我尝试了一下,我想出了以下正则表达式来验证非标准电子邮件地址:
^([\p{L}\_\.\-\d]+)@([\p{L}\-\.\d]+)((\.(\p{L}){2,63})+)$它将验证所有类型的Unicode字母的任何适当的电子邮件地址,TLD限制为2到63个字符。
请检查一下,如果有任何瑕疵,请告诉我。
https://stackoverflow.com/questions/5219848
复制相似问题