阻止或允许带有“+”的电子邮件地址是标准做法吗?

woo*_*586 5 email validation email-validation

我希望每个用户都使用唯一的电子邮件地址进行注册。然而,像 GMail 这样的一些电子邮件地址允许您添加一个 + 后缀,该后缀可用于将多个帐户注册到一个网站,但它全部转到一个电子邮件地址,例如

  • bob@gmail.com 转到 bob@gmail.com
  • bob+1@gmail.com 转到 bob@gmail.com
  • bob+2@gmail.com 转到 bob@gmail.com
  • bob+3@gmail.com 转到 bob@gmail.com
  • bob+4@gmail.com 转到 bob@gmail.com

实际上,他们可以拥有任意数量的电子邮件地址。这是一个问题,因为我的网站将其视为 5 个独立的电子邮件地址,但 gmail 将其视为一个电子邮件地址。

我想阻止任何带有“+”的电子邮件地址,但我不想阻止任何有效的电子邮件地址。什么是标准做法?

kba*_*kba 5

我不认为有关于如何处理这个问题的标准做法,除了不允许 + 全部一起。在另一方面,防止它似乎并没有被非常有用。如果您打算屏蔽的人真的需要它,那么在某些免费服务上创建一个全新的电子邮件地址不会超过几分钟。

还应该注意的是,许多其他电子邮件提供商也提供子寻址,但不使用加号,而是使用连字符(Yahoo、Runbox 等),试图阻止它只会给任何人带来麻烦只是有一个带有连字符的电子邮件地址。这是一场你已经输掉的战争。

此外,如果您过滤掉加号,您基本上不再符合RFC3696标准:

确切的规则是任何 ASCII 字符,包括控制字符,都可以出现在引号中,或出现在引号字符串中。[...]

如果没有引号,本地部分可能由字母字符、数字或任何特殊字符的任意组合组成

!# $ % & ' * + - / = ? ^_`。{ | }~

但如果你坚持,你可以去掉加号部分。

! # $ % & ' * + - / = ?  ^ _ ` . { | } ~

以上会给你

Array
(
    [0] => bob@gmail.com
    [1] => bob@gmail.com
    [2] => bob@gmail.com
)
Run Code Online (Sandbox Code Playgroud)