Regex: Как удалить электронную почту перед символом "@"? - PullRequest
8 голосов
/ 24 февраля 2010

У меня есть следующая строка

First Last <first.last@email.com>

Я хотел бы извлечь

"first.last" 

из строки электронной почты с использованием регулярных выражений и PHP. Как это сделать?

Заранее спасибо!

Ответы [ 6 ]

6 голосов
/ 24 февраля 2010

Я знаю, что ответ уже был принят, но он будет работать на любом действительном адресе электронной почты в формате: Name <identifier@domain>

// Yes this is a valid email address
$email = 'joey <"joe@work"@example.com>';

echo substr($email, strpos($email,"<")+1, strrpos($email, "@")-strpos($email,"<")-1);
// prints: "joe@work"

Большинство других опубликованных решений потерпит неудачу на ряде действительныхадреса электронной почты.

6 голосов
/ 24 февраля 2010
$str ="First Last <first.last@email.com>";
$s = explode("@",$str);
$t = explode("<",$s[0]);
print end($t);
3 голосов
/ 24 февраля 2010

Это намного проще (после проверки, что электронная почта действительна):

$email = 'my.name@domain.com';
$split = explode('@',$email);
$name = $split[0];
echo "$name"; // would echo "my.name"

Чтобы проверить действительность, вы можете сделать это:

function isEmail($email) {
    return (preg_match('/[\w\.\-]+@[\w\.\-]+\.\[w\.]/', $email));
}
if (isEmail($email)) { ... }

Что касается извлечения письма из First Last <first.last@domain.com>,

function returnEmail($contact) {
    preg_match('\b[\w\.\-]+@[\w\.\-]+\.\[w\.]\b', $contact, $matches);
    return $matches[0];
}
2 голосов
/ 24 февраля 2010

Разве вы не можете использовать вместо этого функцию разделения? Я не использую PHP, но кажется, что это было бы намного проще, если бы он был доступен.

1 голос
/ 24 февраля 2010

Если вы получите точный формат, то сопоставьте его с регулярным выражением

/<([^@<>]+)@([^@<>]+)>/

даст вам, например, first.last в группе захвата 1 и email.com в группе захвата 2.

0 голосов
/ 24 февраля 2010

Нет необходимости использовать регулярное выражение; гораздо эффективнее использовать некоторые простые строковые функции.

$string = 'First Last <first.last@email.com>';
$name = trim(substr($string, 0, strpos($string, '<')));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...