我希望每个用户都使用唯一的电子邮件地址进行注册。但是,像GMail这样的一些电子邮件地址允许你添加一个+后缀,可用于将多个帐户注册到一个网站,但它们都会转到一个电子邮件地址,例如。
实际上,他们可以拥有任意数量的电子邮件地址。这是一个问题,因为我的网站将其视为5个单独的电子邮件地址,但gmail将其视为一个电子邮件地址。
我正在考虑使用'+'阻止任何电子邮件地址,但我不想阻止任何有效的电子邮件地址。标准做法是什么?
答案 0 :(得分:4)
除了不允许+全部在一起之外,我认为没有关于如何处理这个问题的标准做法。另一方面,阻止它似乎 有用。如果您打算阻止任何人真正需要它,那么在某些免费服务上创建一个全新的电子邮件地址不会花费超过几分钟。
还应该注意的是,许多其他电子邮件提供商也提供子地址,但不使用加号,但使用连字符(Yahoo,Runbox等),并试图阻止它只会导致只有一个带有连字符的电子邮件地址的人才会遇到麻烦。这场战争已经失败了。
此外,如果你过滤掉加号,你基本上不再符合RFC3696标准:
确切的规则是任何ASCII字符,包括控制 字符,可能出现引号,或带引号的字符串。 [...]
如果没有引号,本地部分可能包含任何组合 字母字符,数字或任何特殊字符
! # $ % & ' * + - / = ? ^ _ ` . { | } ~
但如果你坚持的话,你可以剥掉加号部分。
$emails = array('bob@gmail.com','bob+1@gmail.com','bob+hello@gmail.com');
foreach ($emails as &$email)
{
list($identifier, $domain) = explode('@',$email);
list($name) = explode('+',$identifier);
$email = $name."@".$domain;
}
print_r($emails);
上面会给你
Array
(
[0] => bob@gmail.com
[1] => bob@gmail.com
[2] => bob@gmail.com
)
答案 1 :(得分:0)
电子邮件ID可能包含许多对我们来说不正确的字符,我在这里找到了一个可以回答您的查询的好帖子:What characters are allowed in an email address?
另外,要查找唯一的电子邮件ID,只需获取电子邮件ID的前半部分,然后移除+和。 chars然后验证。