2010-01-12 13 views
5

Merhaba Bir e-posta adresi içerip içermediğini görmek için bir dize aramaya çalışıyorum - ve sonra geri ver.PHP, e-posta adresi için bir dize arama

Tipik e-posta vaildator ifadesidir: Ancak

eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email); 

bir dizede olup olmadığından dizede e-posta adresini dönmek örneğin, nasıl arayacaklarını:

"Merhaba benim adım Joe , [email protected] adresinden iletişime geçebilirim. Ayrıca Twitter'dayım. ”

Biraz garipim, biliyorum ki etrafta var olup olmadığını araştırabiliyorum ama nasıl bulduğumu nasıl bulabilirim.

Teşekkürler.

+1

Bu ifade yanlış, bu arada. –

+1

İlk "e-posta adresi normal ifadesi" isabet: http://www.regular-expressions.info/email.html –

+0

olası yinelenen [In PHP, nasıl bir metin bloğundan birden fazla e-posta adresleri ayıklamak ve koymak onları bir dizi haline mi?] (http://stackoverflow.com/questions/3901070/in-php-how-do-i-extract-multiple-e-mail-addresses-from-a-block-of-text-and -put) –

cevap

4

eklenti $ gruplar:

eregi("...", $email, $regs); 
+0

Harika çalışıyor, teşekkürler! – joobaal

+3

Joobool, bu cevabı faydalı bulduysanız kabul edin. – Sampson

+0

Artık eregi'nin uzun bir süre için kullanımdan kaldırıldığını unutmayın. Jonathan Sampson'ın cevabı daha iyi! –

9

preg_match() kullanabilirsiniz, bu da onu kullanmak için bir diziye gönderir. Geçen argüman olarak

$content = "Hi my name is Joe, I can be contacted at [email protected] I am also on Twitter."; 
preg_match("/[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})/i", $content, $matches); 

print $matches[0]; // [email protected] 
+1

Bu durumda, kalıbınızın başlangıcından ve sonundan^ve $ öğelerini kaldırmanız gerekeceğini unutmayın -^dizenin başlangıcıyla eşleşmesi anlamına gelir ve $ dizenin sonuna eşleşir. e-postanın tüm dizesi olmadıkça bir "eşleşme" bulamaz. İçinde bulunan bir e-posta adresini aramak için aşağıdakileri değiştirirsiniz: "^ [_ a-z0-9 -] + (\. [_ A-z0-9 -] +) * @ [a-z0-9 -] + (\. [a-z0-9 -] +) * (\. [az] {2,3}) $ "to" [_a-z0-9 -] + (\. [_ a-z0-9 -] +) * @ [a-z0-9 -] + (\. [a-z0-9 -] +) * (\. [az] {2,3}) " – Nicole

+0

eregi kullanmaya devam etmeye karar verdim, teşekkürler işaretçi Renesis. – joobaal

+0

Oh ve çok yardımcı olduğunuz için teşekkürler Jonathan! – joobaal

0

Daha iyi bir PCRE bir ADDR_SPEC ayıklanması içindir:

/[a-z0-9\._%+!$&*=^|~#%'`?{}/\-][email protected]([a-z0-9\-]+\.){1,}([a-z]{2,6})/ 

Ama gerçekten size daha sonra bir RFC 2822 ayıklamak istiyorsanız gibi bir şey gerekir:

/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/ 

C.