在 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;
对于多个“@”符号进行了修改。
"Abc\@def"@iana.org
和许多其他地址。 - PeeHaa@
作为分隔符,但是允许在邮箱中使用引号可能是另一种解决方案。代码示例:$explode = str_getcsv($string, '@','"');
- Mark Bakerstrrpos()
和 substr()
相比,使用数组会很沉重。 - Ja͢ck您可以使用
$user = implode('@', explode('@', $email, -1));
或者
$user = substr($email, 0, strrpos($mail, '@'));
@
。https://dev59.com/93I-5IYBdhLWcg3wBjjk:~:text=%22very.unusual.%40.unusual.com%22%40example.com - mickmackusa在PHP手册中的strpos()
函数入口页有一个很好的例子:http://php.net/manual/en/function.strstr.php#117530
PHP为你提供了方便。当处理电子邮件地址的域名部分时,只需将strstr()的返回值传递给substr(),并从第1个字符开始:
substr(strstr($haystack, '@'), 1);
@
。https://dev59.com/93I-5IYBdhLWcg3wBjjk:~:text=%22very.unusual.%40.unusual.com%22%40example.com - mickmackusa您可以使用:
strstr($email, '@', true);
@
。https://dev59.com/93I-5IYBdhLWcg3wBjjk:~:text=%22very.unusual.%40.unusual.com%22%40example.com 本页面上的其他答案适当地处理了这种边缘情况。 - mickmackusastrtok($email, '@')
也可以用于99.99999999999%的电子邮件。 - Semra$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
$brokenEmailCount = count($brokenEmail); return $brokenEmail[$brokenEmailCount - 1];
} - Jaskaran Singh