一个电子邮件地址中可以有多少个@符号


How many @ symbol can be in an email address?

在任何电子邮件id中有指定数量的@符号的规则吗。如果我们要检查电子邮件id是否有效或是否使用PHP,我会想到这一点。

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

请参阅我之前的回答,了解更多信息,如果您有旧版本的PHP ,您可以使用正则表达式

p.S.

如果有人错过了我的观点:不要试着想出一些自己的验证方法来"永远"验证电子邮件地址。

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

如果CCD_ 2或任何其它";不寻常的";字符(如RFC 5322所定义)存在于本地部分,它必须以引号出现,例如:"user@something"@example.com

@字符没有特定限制。

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

另请参阅有关该主题的维基百科页面。

地址规范是一个特定的Internet标识符,包含局部解释的字符串后面跟着at符号字符("@";,ASCII值64),后跟一个Internet域。本地解释字符串是带引号的字符串或点原子。如果字符串可以表示为一个点原子(也就是说,它不包含除了atext字符或"之外的字符"被atext包围字符),则应使用点原子形式并引用-不应使用字符串形式。评论和折叠空白不应在"@"在addr-spec中。

请参阅:-https://www.rfc-editor.org/rfc/rfc5322#section-3.4.1

我真正的问题是,在一封电子邮件中有两个@符号有意义吗
它是如何工作的?

我会使用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');

输出,

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

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