【问题标题】:How many @ symbol can be in an email address?一个电子邮件地址中可以有多少个@符号?
【发布时间】:2012-09-03 13:34:44
【问题描述】:

是否有任何规则可以在任何电子邮件 ID 中使用指定数量的 @ 符号。 如果我们要检查电子邮件 ID 是否有效,请想到我是否使用 PHP。

【问题讨论】:

  • 据我所知,您只能拥有一个。 @符号是域名和地址名之间的分隔符;多个 @ 符号很可能会混淆电子邮件解析器。
  • @PaulTomblin ..这是分隔符.. :-)
  • 您所说的“email id”是指地址吗?

标签: php email-validation


【解决方案1】:

如果引用多个@,则允许。我不得不问你为什么需要这些信息。请不要尝试编写正则表达式/函数或其他任何东西来验证电子邮件地址。您必须担心 3 个 rfc(如果您想考虑 unicode,可能需要 4 个)。而你失败,它会让你发疯。

See my previous answer for more information and a regex you may use if you have an older version of PHP

附言

万一有人错过了我的意思:不要尝试自己进行一些验证,以“永远”验证电子邮件地址。

【讨论】:

  • 这里的双重检查,你的意思是 username 中的'@'符号可以有多个对吗?域中不能有'@'可以吗?我问的原因是从提交的电子邮件中获取主机名以检查 mx 记录,据我所知,标准验证方案。
【解决方案2】:

除了最后一个必须是域名和"local part"之间的分隔符之外,可以有任何数字(在电子邮件地址的大小限制内)。

如果@ 或任何其他“不寻常”字符(由RFC 5322 定义)存在于本地部分,则MUST 出现在引号中,例如:"user@something"@example.com

【讨论】:

    【解决方案3】:

    @ 字符没有具体限制。

    "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com 是一个有效的地址。

    另请参阅 the Wikipedia page 关于该主题。

    【讨论】:

      【解决方案4】:

      addr-spec 是一个特定的 Internet 标识符,它包含一个 本地解释的字符串,后跟 at 符号字符(“@”, ASCII 值 64) 后跟 Internet 域。当地的 解释字符串是带引号的字符串或点原子。如果 字符串可以表示为一个点原子(也就是说,它不包含 atext 字符或“.”以外的字符被文字包围 字符),然后应该使用点原子形式并引用- 不应使用字符串形式。评论和折叠空白 不应在 addr-spec 中的“@”周围使用。

      见:- https://www.rfc-editor.org/rfc/rfc5322#section-3.4.1

      【讨论】:

        【解决方案5】:

        我真正的问题是在电子邮件中使用两个 @ 符号是否有意义?
        它是如何工作的?

        我会将filter_var()FILTER_VALIDATE_EMAIL 一起使用。下面是一个示例使用和输出,

        function testemail($email) {
            echo "'$email' => ";
            var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));    
            echo "<br />";
        }
        
        testemail('');
        testemail('myemailsample.com');
        testemail('myemail@sample');
        testemail('myemail@sample.com');
        testemail('myemail@@sample.com');
        testemail('myemail@sa@mple.com');
        

        输出,

        '' => 布尔(假)
        'myemailsample.com' => bool(false)
        'myemail@sample' => bool(false)
        'myemail@sample.com' => 字符串(18)“myemail@sample.com”
        'myemail@@sample.com' => bool(false)
        'myemail@sa@mple.com' => bool(false)

        【讨论】:

        • “我真正的问题是有两个 @ 符号是否有意义”如果规范允许的话。尽管人们可能会争论规格的重量。
        • 看来是真的,'"my@email"@sample.com' => string(21) ""my@email"@sample.com"
        【解决方案6】:

        要检查有效的电子邮件地址,我应该使用 filter_var 函数。它将验证字符串并返回真或假。您不必考虑正则表达式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-01
          • 2021-06-07
          • 2017-10-21
          • 2018-08-21
          • 2016-03-23
          • 2013-07-29
          • 2012-01-21
          • 2011-03-12
          相关资源
          最近更新 更多