14

在 PHP 中,我有一个这样的字符串:

$string = "user@domain.com";

如何仅从电子邮件地址获取“用户”?之前有没有简单的方法来获得价值@

4

5 回答 5

26

假设电子邮件地址是有效的,这种文本方法应该有效:

$prefix = substr($email, 0, strrpos($email, '@'));

它将所有内容直到(但不包括)最后一次出现@. 它使用最后一次出现,因为此电子邮件地址有效:

"foo\@bar"@iana.org

如果您尚未验证字符串,我建议您使用过滤器功能:

if (($email = filter_var($email, FILTER_VALIDATE_EMAIL)) !== false) {
    // okay, should be valid now
}
于 2013-08-14T15:41:25.723 回答
5

尝试以下操作:

$string = "user@domain.com";

$explode = explode("@",$string);

array_pop($explode);

$newstring = join('@', $explode);

echo $newstring;

针对多个“@”符号进行了修改。

于 2013-08-14T15:31:23.903 回答
2

strpos()该函数的 PHP 手册条目中有一个很好的示例:http: //php.net/manual/en/function.strstr.php#117530

PHP 使这对您来说很容易。使用电子邮件地址的域部分时,只需将 strstr() 的返回值传递给 substr() 并从 1 开始:

substr(strstr($haystack, '@'), 1);

于 2013-08-14T15:36:34.533 回答
2

您可以使用

$user = implode('@', explode('@', $email, -1));

或者

$user = substr($email, 0, strrpos($mail, '@'));
于 2013-08-14T15:54:22.333 回答
0

以最简单的形式(假设单个'@'),您可以遵循@Ben Fortune 的答案(使用explode())。

否则,试试这个:

$email1 = "foo@example.com";
$email2 = "b\@r@example.com";

preg_match_all ("/^(.+)@[^@]+$/", $email1, $e1);
preg_match_all ("/^(.+)@[^@]+$/", $email2, $e2);

echo "Emails: {$e1[1][0]} and {$e2[1][0]}\n";
// Result: Emails: foo and b\@r
于 2013-08-14T15:39:47.540 回答