Regex: Как разделить электронную почту прежде символ?

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

First Last <first.last@email.com>

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

"first.last" 

от почтовой строки с помощью regex и PHP. Как пойти об этом?

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

8
задан st4ck0v3rfl0w 24 February 2010 в 01:57
поделиться

6 ответов

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

// 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
ответ дан 5 December 2019 в 09:25
поделиться
$str ="First Last <first.last@email.com>";
$s = explode("@",$str);
$t = explode("<",$s[0]);
print end($t);
6
ответ дан 5 December 2019 в 09:25
поделиться

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

$string = 'First Last <first.last@email.com>';
$name = trim(substr($string, 0, strpos($string, '<')));
0
ответ дан 5 December 2019 в 09:25
поделиться

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

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

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

1
ответ дан 5 December 2019 в 09:25
поделиться

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

2
ответ дан 5 December 2019 в 09:25
поделиться

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

$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 ,

function returnEmail($contact) {
    preg_match('\b[\w\.\-]+@[\w\.\-]+\.\[w\.]\b', $contact, $matches);
    return $matches[0];
}
3
ответ дан 5 December 2019 в 09:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: