10 ejemplos de expresiones regulares en PHP comunes
Como seguramente muchos ya sabréis las expresiones regulares nos permiten definir patrones que después podremos usar para detectar si se cumplen determinadas características a un cadena de texto, son muy utilizadas realizar todo tipo de filtros como puede ser detectar si un email está correctamente escrito, comprobar si una dirección IP está bien escrita …
Anteriormente usaba ereg para detectar las expresiones regulares pero estas funciones han quedado obsoletas a partir de PHP 5.3.0 por lo que los ejemplos que os pongo a continuación uso las funciones preg_match.
A continuación pongo 10 ejemplos de funciones útiles a las que podremos llamar introduciendo la cadena de texto correspondiente, usaré nombres para las funciones fácilmente identificables para que sepáis concretamente que es lo que realiza cada una:
Validar que es un nombre de usuario
function validarUsuario($nombre) { return preg_match("#^ [a-z] [\da-z_] {6,22} [a-z\d] \$#i", $nombre); } |
Expresión regular para validar que un email está escrito correctamente
Hay que destacar que no comprueba si existe o no si no simplemente si usa el formato estándar.
function validarEmail($email) { return preg_match("#^(((( [a-z\d] [\.\-\+_] ?)*) [a-z0-9] )+)\@(((( [a-z\d] [\.\-_] ?){0,62}) [a-z\d] )+)\.( [a-z\d] {2,6})$#i", $email); } |
Expresión regular para validar una fecha
Valida una fecha con el formato 00/00/0000
function validarFecha($fecha) { return preg_match('/^\d{1,2}\/\d{1,2}\/\d{4}$/', $fecha); } |
Expresión regular para validar un teléfono de España
Validar un teléfono de España con los 9 dígitos
function validarTelefono($telefono) { return preg_match('/^[9|8|6|7][0-9]{8}$/', $telefono); } |
Expresión regular para validar una dirección IP
Si la dirección IP es IPv4:
function validarIP($ip) { return preg_match('^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$',$ip); } |
Si la dirección IP es IPv6:
function validarIP($ip) { return preg_match("/^\s*((([0-9A-Fa-f]{1,4}:){7}(([0-9A-Fa-f]{1,4})|:))|(([0-9A-Fa-f]{1,4}:){6}(:|((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})|(:[0-9A-Fa-f]{1,4})))|(([0-9A-Fa-f]{1,4}:){5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}){0,1}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}){0,2}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}){0,3}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:)(:[0-9A-Fa-f]{1,4}){0,4}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(:(:[0-9A-Fa-f]{1,4}){0,5}((:((25[0-5]|2[0-4]\d| [01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})))(%.+)?\s*$/",$ip); } |
Expresión regular para validar una URL
Con esta función no solo podemos validar que la URL esté correctamente escrita si no que también lo convertiremos en un enlace HTML
function validaryPonerEnlaceaURL($url) { $host = "( [a-z\d] [-a-z\d] * [a-z\d] \.)+ [a-z] [-a-z\d] * [a-z] "; $port = "(:\d{1,})?"; $path = "(\/ [^?<>\#\"\s] +)?"; $query = "(\? [^<>\#\"\s] +)?"; $reg = "#((ht|f)tps?:\/\/{$host}{$port}{$path}{$query})#i"; return preg_replace($reg, "<a href='$1'>$1</a>", $url); } |
Expresión regular con la que podemos controlar los insultos
Realmente muy útil si tienes comentarios y quieres controlar lo que publican tus usuarios, podrás ir añadiendo en la lista del array $insultos[] todas las palabras que quieras substituir por ***
function detectarInsultos($string){ function prep_regexp_array(&$item){ $item = "#$item#i"; } function stars($matches){ return substr($matches [0] , 0, 1).str_repeat("*", strlen($matches [0] )-1); } $insultos= array("insulto1", "insulto2"); array_walk($insultos, "prep_regexp_array"); return preg_replace_callback($insultos, "***", $string); } |
Expresión regular para proteger los formularios
Podrás controlar si alguien escribe código en el formulario pudiendo impedir que se guarde.
function detectarJavascripts($source, $tags = null) { function clean($matched) { $attribs = "javascript:|onclick|ondblclick|onmousedown|onmouseup|onmouseover|". "onmousemove|onmouseout|onkeypress|onkeydown|onkeyup|". "onload|class|id|src|style"; $quot = "\"|\'|\`"; $stripAttrib = "' ($attribs)\s*=\s*($quot)(.*?)(\\2)'i"; $clean = stripslashes($matched [0] ); $clean = preg_replace($stripAttrib, '', $clean); return $clean; } $allowedTags='<a><br><b><i><br><li><ol><p><strong><u><ul>'; $clean = strip_tags($source, $allowedTags); $clean = preg_replace_callback('#<(.*?)>#', "clean", $source); return $source; } |
Expresión regular cortar cadenas sin cortar palabras a medias
function cortarCadena_sincortarpañabras($cadena){ $expresionregular = "/(^.{0,10})(\W+.*$)/"; $reemplazo = "\${1}"; return preg_replace($expresionregular, $reemplazo, $cadena); } |
Utilidades con preg_split para convertir las fechas de MySQL
Funcion que Convierte fecha de mysql a normal
function cambiar_fecha_mysql_normal($fecha) { $cad = preg_split(“/ /”,$fecha); $sub_cad = preg_split(“/-/”,$cad[0]); $fecha_formateada = $sub_cad[2].”/”.$sub_cad[1].”/”.$sub_cad[0].” “.$cad[1]; return $fecha_formateada; } |
Funcion que Convierte fecha de normal a mysql
function cambiar_fecha_normal_mysql($fecha) { $cad = preg_split(“/ /”,$fecha); $sub_cad = preg_split(“/-/”,$cad[0]); $cad_hora = preg_split(“/:/”,$cad[1]); $hora_formateada = $cad[0].”:”.$cad_hora[1].”:”.$cad_hora[2]; $fecha_formateada = $sub_cad[2].”-”.$sub_cad[1].”-”.$sub_cad[0].” “.$hora_formateada; return $fecha_formateada; } |
Cualquier error que detectéis no dudéis en comentarlo o si conocéis algún ejemplo que pueda ser de utilidad compartirlo para que el resto podamos hacer uso de el.
Muy interesante. Gracias.
La de email no funciona siempre manda 0.