Regex: "@" önce e-posta atmak için nasıl

5 Cevap php

Ben şu dize var

First Last <first.last@email.com>

Ben ayıklamak istiyorum

"first.last" 

regex & kullanarak e-posta dizeden PHP. Bu nasıl gitmek için?

Şimdiden teşekkürler!

5 Cevap

Ben cevabı zaten kabul edildi biliyorum, ama bu biçimde herhangi bir geçerli e-posta adresi üzerinde çalışacak: 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"

Diğer yayınlanmıştır çözümlerin en geçerli e-posta adreslerinin bir dizi başarısız olur.

Sadece yerine bölünmüş bir işlevi kullanmak değil miyim? Ben PHP kullanabilirsiniz ama mevcut ise, bu kadar basit olurdu gibi görünüyor yok.

O exact biçiminde ise o zaman regex karşı eşleşen alırsınız

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

size mesela verecek first.last yakalama grup 1 ve email.com yakalama 2. grupta.

Bu (e-posta geçerli olduğunu kontrol ettikten sonra) çok daha kolaydır:

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

Geçerliliğini kontrol etmek için bunu yapabilirsiniz:

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

First Last <first.last@domain.com> üzerinden e-posta ayıklamak için olduğu gibi,

function returnEmail($contact) {
    preg_match('\b[\w\.\-]+@[\w\.\-]+\.\[w\.]\b', $contact, $matches);
    return $matches[0];
}

Regexpi kullanmaya gerek yok; çok daha verimli bazı basit dize işlevlerini kullanın.

$string = 'First Last <first.last@email.com>';
$name = trim(substr($string, 0, strpos($string, '<')));