2010-01-12 30 views
5

Hola Im tratando de buscar una cadena para ver si contiene una dirección de correo electrónico y luego devolverla.PHP buscar una cadena para una dirección de correo electrónico

Una expresión típica vaildator correo electrónico es:

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

Sin embargo ¿cómo busco si eso es en una cadena, por ejemplo, devuelve la dirección de correo electrónico en la cadena:

"Hola mi nombre es Joe , Me pueden contactar en [email protected] También estoy en Twitter ".

Estoy un poco perplejo, sé que puedo buscar si existe en absoluto con \ b pero, ¿cómo devuelvo lo que se encuentra?

Gracias.

+1

Esa expresión es incorrecta, por cierto. –

+1

Primer golpe en "expresión regular de dirección de correo electrónico": http://www.regular-expressions.info/email.html –

+0

posible duplicado de [En PHP, ¿cómo extraigo varias direcciones de correo electrónico de un bloque de texto y pongo en una matriz?] (http://stackoverflow.com/questions/3901070/in-php-how-do-i-extract-multiple-e-mail-addresses-from-a-block-of-text-and -put) –

Respuesta

4

agregar $ reglas como el último argumento:

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

Funciona muy bien, gracias! – joobaal

+3

Joobool, si le resultó útil esta respuesta, acéptelo. – Sampson

+0

Tenga en cuenta que 'eregi' se ha depreciado durante mucho tiempo. ¡La respuesta de Jonathan Sampson es mejor! –

9

Puede usar preg_match(), que lo generará en una matriz para su uso.

$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

Tenga en cuenta que en este caso, tendrá que eliminar^y $ desde el principio y el final de su patrón -^significa que coincida con el inicio de la cadena, y $ coincide con el final de la cadena, por lo que no encontrará una "coincidencia" a menos que el correo electrónico sea la cadena completa. Para buscar una dirección de correo electrónico contenida, debe cambiar: "^ [_ a-z0-9 -] + (\. [_ A-z0-9 -] +) * @ [a-z0-9 -] + (\. [a-z0-9 -] +) * (\. [az] {2,3}) $ "a" [_a-z0-9 -] + (\. [_ a-z0-9 -] +) * @ [a-z0-9 -] + (\. [a-z0-9 -] +) * (\. [az] {2,3}) " – Nicole

+0

Decidí seguir usando eregi, gracias por el puntero Renesis. – joobaal

+0

¡Ah, y gracias por ayudarme también a Jonathan! – joobaal

0

Una mejor PCRE para extraer una ADDR_SPEC es:

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

Pero si realmente desea extraer un RFC 2822, entonces necesita algo como:

/[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.

Cuestiones relacionadas