是否有任何规则可以在任何电子邮件 ID 中使用指定数量的 @ 符号。如果我们要检查电子邮件 ID 是否有效,我会想到是否使用 PHP。
6 回答
如果允许引用多个@
。我不得不问你为什么需要这些信息。请不要尝试编写正则表达式/函数或任何验证电子邮件地址的方法。您必须担心 3 个 rfc(如果您想考虑 unicode,可能需要 4 个)。你会失败,它会让你发疯。
如果您有旧版本的 PHP,请参阅我以前的答案以获取更多信息和可以使用的正则表达式
附言
万一有人错过了我的观点:不要试图提出自己的一些验证来“永远”验证电子邮件地址。
可以有任何数字(在电子邮件地址的大小限制内),但最后一个必须是域名和“本地部分”之间的分隔符。
如果本地部分中存在一个@
或任何其他“不寻常”字符(由RFC 5322定义),则它必须出现在引号中,例如:"user@something"@example.com
字符没有具体限制@
。
"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com
是一个有效的地址。
另请参阅有关该主题的 Wikipedia 页面。
我真正的问题是在电子邮件中包含两个 @ 符号是否有意义?
它将如何运作?
我会使用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)
addr-spec 是一个特定的 Internet 标识符,它包含一个本地解释的字符串,后跟 at-sign 字符(“@”,ASCII 值 64),后跟一个 Internet 域。本地解释的字符串是带引号的字符串或点原子。如果字符串可以表示为点原子(即,它不包含除 atext 字符或由 atext 字符包围的“.”以外的任何字符),则应使用点原子形式,不应使用带引号的字符串形式使用。addr-spec 中的“@”周围不应使用注释和折叠空格。
要检查有效的电子邮件地址,我应该使用 filter_var 函数。它将验证字符串并返回真或假。您不必考虑正则表达式。