在PHP中,我有一个这样的字符串:
$string = "user@domain.com";
如何从电子邮件地址获取“用户”?有没有简单的方法可以在@之前获得价值?
答案 0 :(得分:17)
假设电子邮件地址有效,则此文本方法应该有效:
$prefix = substr($email, 0, strrpos($email, '@'));
最后一次出现@
需要一切(但不包括)。它使用最后一次出现,因为此电子邮件地址有效:
"foo\@bar"@iana.org
如果你还没有验证字符串,我建议使用过滤函数:
if (($email = filter_var($email, FILTER_VALIDATE_EMAIL)) !== false) {
// okay, should be valid now
}
答案 1 :(得分:6)
尝试以下方法:
$string = "user@domain.com";
$explode = explode("@",$string);
array_pop($explode);
$newstring = join('@', $explode);
echo $newstring;
修改了多个'@'符号。
答案 2 :(得分:2)
strpos()
函数的PHP手册条目中有一个很好的例子:http://php.net/manual/en/function.strstr.php#117530
PHP让您轻松上手。使用电子邮件地址的域部分时,只需将strstr()的返回值传递给substr()并从1开始:
substr(strstr($haystack, '@'), 1);
答案 3 :(得分:2)
您可以使用
$user = implode('@', explode('@', $email, -1));
或
$user = substr($email, 0, strrpos($mail, '@'));
答案 4 :(得分: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