24

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

4

6 回答 6

32

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

如果您有旧版本的 PHP,请参阅我以前的答案以获取更多信息和可以使用的正则表达式

附言

万一有人错过了我的观点:不要试图提出自己的一些验证来“永远”验证电子邮件地址。

于 2012-09-10T16:35:08.820 回答
19

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

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

于 2012-09-10T16:34:31.683 回答
14

字符没有具体限制@

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

另请参阅有关该主题的 Wikipedia 页面

于 2012-09-10T16:34:39.403 回答
1

我真正的问题是在电子邮件中包含两个 @ 符号是否有意义?
它将如何运作?

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

输出,

'' => bool(false)
'myemailsample.com' => bool(false)
'myemail@sample' => bool(false)
'myemail@sample.com' => string(18) "myemail@sample.com"
'myemail@@sample.com' => bool(false)
'myemail@sa@mple.com' => bool(false)

于 2012-09-10T16:46:37.507 回答
1

addr-spec 是一个特定的 Internet 标识符,它包含一个本地解释的字符串,后跟 at-sign 字符(“@”,ASCII 值 64),后跟一个 Internet 域。本地解释的字符串是带引号的字符串或点原子。如果字符串可以表示为点原子(即,它不包含除 atext 字符或由 atext 字符包围的“.”以外的任何字符),则应使用点原子形式,不应使用带引号的字符串形式使用。addr-spec 中的“@”周围不应使用注释和折叠空格。

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

于 2012-09-10T16:37:20.247 回答
0

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

于 2012-09-10T16:34:43.513 回答