Foro

[APORTE] Validar emails

0
Muy buenas, muchas veces estamos queriendo validar un correo de una cadena o extraer un correo de una cadena y no encontramos funciones para ello, por lo que aqui les paso una funcion que me vi obligado a realizar por necesidad, no es como las que estan en internet que usan funciones antiguas y que nos salen predecated, esta funcion es actual y no es copy paste(es un remastered de una funcion que use hace algunos años, no recuerdo el link , es una lastima), si desean postearla en otro lugar al menos citen la fuente. private function _chainToArrayValidEmails($chain) { //creamos la funcion puede ser private o public segun nuestra necesidad $validos = array(); //array donde colocaremos los correos validos $invalidos = array();//array donde colocaremos los correos invalidos. $chain = str_replace(","," ", $chain);// Reemplazamos las comas (, ) por espacios $chain = str_replace(";"," ", $chain);// Reemplazamos los punto y coma (; ) por espacios $chain = str_replace("","", $chain);// Eliminamos (> ) $chain = preg_replace("[^A-Za-z._0-9@ ]"," ",$chain);// Reemplazamos las cadenas con @ por un espacio //Eliminamos con con trim() los espacios al inicio y final de la cadena. // Dividimos en string's pequeños mediante strtok() basandonos en los espacios // Porque usamos los espacios?. Facil debido a que los correos no usan espacios es la mejor manera de filtrar. $token = trim(strtok($chain, " ") ) ; // Ahora por cada string comenzamos a verificar si es un correo valido // Para eso usaremos la funcion filter_val() de php con el filtro FILTER_VALIDATE_EMAIL el cual nos dara true o false // segun corresponda while($token !== "") { if(strpos($token, "@") !== false) { $token = preg_replace("[^A-Za-z._0-9@]","", $token); if(filter_var ($token, FILTER_VALIDATE_EMAIL)) { $validos[] = strtolower($token); } else { $invalidos[] = strtolower($token); } } $token = trim(strtok(" ")); } // Ahora nos aseguramos que no se repitan los correos usando array_unique(), por si en la cadena venian correos repetidos $validos = array_unique($validos); $invalidos = array_unique($invalidos); // Creamos en array que regresara y dentro ponemos los resultados $arrayRegreso = array( 'validos' => $validos ,'invalidos' => $invalidos ); // Retornamos el array return $arrarRegreso; } Esta funcion recibe tanto un email o varios, estos pueden estar separados por coma( , ) punto y coma ( ; ) , la funcion los procesa y enviara el resultado en un array. Modo de empleo: $chain = "Jose Luis ,,, juan , "; //si es unafuncion normal print_r(_chainToArrayValidEmails($chain)); //si esta siendo usada en una clase print_r($this->_chainToArrayValidEmails($chain)); En el modo de uso solo se ha puesto para imprimir el retorno, ya queda de ustedes de hacer las operaciones correspondientes segun lo necesiten. Aqui la funcion limpia sin comentarios private function _chainToArrayValidEmails($chain) { $validos = array(); $invalidos = array(); $chain = str_replace(","," ", $chain); $chain = str_replace(";"," ", $chain); $chain = str_replace("","", $chain); $chain = preg_replace("[^A-Za-z._0-9@ ]"," ",$chain); $token = trim(strtok($chain, " ")); while($token !== "") { if(strpos($token, "@") !== false) { $token = preg_replace("[^A-Za-z._0-9@]","", $token); if(filter_var ($token, FILTER_VALIDATE_EMAIL)) { $validos[] = strtolower($token); } else { $invalidos[] = strtolower($token); } } $token = trim(strtok(" ")); } $validos = array_unique($validos); $invalidos = array_unique($invalidos); $arrayRegreso = array( 'validos' => $validos ,'invalidos' => $invalidos ); return $arrarRegreso; } Bueno eso es todo y espero que les sea de utilidad.
0
Gracias por el aporte, un script a tener en cuenta ;) Salu2

¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook

Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.