2

我正在寻找最合适的方法来验证我正在开发的挪威网站的电子邮件地址。我首先想到的是使用PHP的过滤功能filter_var()FILTER_VALIDATE_EMAIL过滤器。正是我需要的,对吧?嗯,问题是,在挪威,您可能偶尔会遇到带有 æ、ø 和 å 等字母的电子邮件地址。

所以,由于FILTER_VALIDATE_EMAIL过滤器不支持像 æ、ø 和 å 这样的字符,我开始认为我真的根本无法使用该filter_var()功能 - 至少在非英语网站上不是,对吧?

我想听听你们对此有何看法。这是否意味着我应该手动编写大部分验证?与PHP 中的验证preg_match()相比,这是一个更好的选择吗?filter_var()

例子:

//$email = "ørnulf.åsen@gmail.com";
$email = "ørnulf.åsen@gmæil.com";

// How I would do it with preg_match()
$ok_characters = '[a-zæøå0-9!#$%&\'*+-\/=?^_`{|}~]';
$pattern = '/^' . $ok_characters . '+(\.' . $ok_characters . '+)*@' . $ok_characters . '+(\.' . $ok_characters . '+)*(\.[a-z]{2,4})$/i'; // [a-z]{2,4} should be replaced with the most known top-level domain names
if (preg_match($pattern, $email)) {
    echo 'this regexp thinks ' . $email . " is valid.";
} else {
    echo 'this regexp thinks ' . $email . " is invalid.";
}

// How I would do it with filter_var()
if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo 'filter_var thinks ' . $email . " is valid.";
} else {
    echo 'filter_var thinks ' . $email . " is invalid.";
}

结果:

preg_match()验证两个电子邮件地址是否有效。但该filter_var()函数认为两者都是无效的。

有什么建议么?

4

1 回答 1

0

电子邮件地址的本地部分不应允许非英文字符,我认为任何电子邮件提供商都不会接受您提到的电子邮件地址的注册,因为许多电子邮件服务器不会接受来自地址的消息,例如这个。您可以查看电子邮件地址本地部分的规范: 维基百科:电子邮件地址本地部分 ,因为 FILTER_VALIDATE_EMAIL 应该始终满足您的需求。

于 2014-06-04T14:38:19.347 回答