从php中的电子邮件地址获取用户名


get user name from an E-mail address in php

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

$string = "user@domain.com";

如何获得";用户";仅来自电子邮件地址?有什么简单的方法可以得到@之前的值吗?

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

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

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

"foo'@bar"@iana.org

如果你还没有验证字符串,我建议使用过滤函数:

if (($email = filter_var($email, FILTER_VALIDATE_EMAIL)) !== false) {
    // okay, should be valid now
}

尝试以下操作:

$string = "user@domain.com";
$explode = explode("@",$string);
array_pop($explode);
$newstring = join('@', $explode);
echo $newstring;

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

您可以使用

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

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

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

PHP让这一切变得简单。当使用电子邮件地址的域部分时,只需将strstr()的返回值传递给substr(),然后从1:开始

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

您可以使用:

strstr($email, '@', true);

在最简单的形式中(假设单个"@"),您可以遵循@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