У меня есть следующая Строка
First Last <first.last@email.com>
Я хотел бы извлечь
"first.last"
от почтовой строки с помощью regex и PHP. Как пойти об этом?
Заранее спасибо!
Я знаю, что ответ уже принят, но это будет работать на любом действующем адресе электронной почты в формате: Имя <идентификатор @ домен>
// 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"
Большинство других опубликованных решений не сработают на нескольких действительных адрес электронной почты.
$str ="First Last <first.last@email.com>";
$s = explode("@",$str);
$t = explode("<",$s[0]);
print end($t);
Нет необходимости использовать регулярное выражение; гораздо эффективнее использовать некоторые простые строковые функции.
$string = 'First Last <first.last@email.com>';
$name = trim(substr($string, 0, strpos($string, '<')));
Если вы получите точный формат, то сопоставление с регулярным выражением
/<([^@<>]+)@([^@<>]+)>/
даст вам, например, first.last
в группе захвата 1 и email.com
в группе захвата 2.
Разве нельзя вместо этого просто использовать функцию разделения? Я не использую PHP, но, похоже, это было бы намного проще, если бы он был доступен.
Это намного проще (после проверки того, что письмо действительно):
$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]; }