Una expresión regular, también llamada patrón, es una forma de representar a los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el lenguaje.
En programación, una expresión regular es una cadena en la que se indica un patrón para construir, validar, filtrar o reemplazar otras cadenas según se necesite; es decir, qué "forma" ha de tener una cadena.
A continuación se listan unas cuantas funciones en php que usan expresiones regulares para múltiples propósitos:
<?php function validarUsuario($nombre) { return preg_match("#^[a-z][\da-z_]{6,22}[a-z\d]\$#i", $nombre); } //ejemplo: if(validarUsuario("EducacionIT")){ echo "usuario valido"; } else { echo "usuario invalido"; } ?>
<?php function validarEmail($email){ $reg = "#^(((([a-z\d][\.\-\+_]?)*)[a-z0-9])+)\@(((([a-z\d][\.\-_]?){0,62})[a-z\d])+)\.([a-z\d]{2,6})$#i"; return preg_match($reg, $email); } //ejemplo: if(validarEmail("info@educacionit.com")){ echo "email valido"; } else { echo "email invalido"; } ?>
Esta validación acepta la fecha en formato DD-MM-YYYY, con separadores (/),(-) y (.)
<?php function validarFecha($fecha){ $sep = "[\/\-\.]"; $req = "#^(((0?[1-9]|1\d|2[0-8]){$sep}(0?[1-9]|1[012])|(29|30){$sep}(0?[13456789]|1[012])|31{$sep}(0?[13578]|1[02])){$sep}(19|[2-9]\d)\d{2}|29{$sep}0?2{$sep}((19|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00)))$#"; return preg_match($reg, $fecha); } //ejemplo: if(validarFecha("05/01/2011")){ echo "fecha valida"; } else { echo "fecha invalida"; } ?>
Valida que una dirección IP este dentro del rango 0.0.0.0 a 255.255.255.255
<?php function validarIP($ip){ $val_0_to_255 = "(25[012345]|2[01234]\d|[01]?\d\d?)"; $reg = "#^($val_0_to_255\.$val_0_to_255\.$val_0_to_255\.$val_0_to_255)$#"; return preg_match($reg, $ip, $matches); } //ejemplo: if(validarIP("190.210.132.55")){ echo "IP valida"; } else { echo "IP invalida"; } ?>
El formato utilizado seria así: (00)-0000-0000. Donde los primeros 3 números serian el código de tu País.
<?php function validarTelefono($numero){ $reg = "#^\(?\d{2}\)?[\s\.-]?\d{4}[\s\.-]?\d{4}$#"; return preg_match($reg, $numero); } //ejemplo: if(validarTelefono("(11)-4328-0457")){ echo "telefono valido"; } else { echo "telefono invalido"; } ?>
En foros es muy utilizado la función para reemplazar simples direcciones web por enlaces HTML.
<?php function convertirURL($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); } //ejemplo: echo convertirURL("visita https://www.educacionit.com"); ?>
Esta expresión regular filtra las palabras groseras que algunos de nuestros usuarios podrían poner.
<?php function limpiarInsultos($string){ function prep_regexp_array(&$item){ $item = "#$item#i"; } function stars($matches){ return substr($matches[0], 0, 1).str_repeat("*", strlen($matches[0])-1); } $swears = array("tonto", "idiota"); //palabras a bloquear array_walk($swears, "prep_regexp_array"); return preg_replace_callback($swears, "stars", $string); } //ejemplo: echo limpiarInsultos("Juan es un idiota"); ?>
<?php function limpiarTags($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; } //ejemplo: echo limpiarTags("este código es malicioso <script>alert('hola!')</script>"); ?>
<?php function convertirBBcode($string){ $string = strip_tags($string); $patterns = array( "bold" => "#\[b\](.*?)\[/b\]#is", "italics" => "#\[i\](.*?)\[/i\]#is", "underline" => "#\[u\](.*?)\[/u\]#is", "link_title" => "#\[url=(.*?)](.*?)\[/url\]#i", "link_basic" => "#\[url](.*?)\[/url\]#i", "color" => "#\[color=(red|green|blue|yellow)\](.*?)\[/color\]#is" ); $replacements = array( "bold" => "<b>$1</b>", "italics" => "<i>$1</i>", "underline" => "<u>$1</u>", "link_title" => "<a href=\"$1\">$2</a>", "link_basic" => "<a href=\"$1\">$1</a>", "color" => "<span style='color:$1;'>$2</span>" ); return preg_replace($patterns, $replacements, $string); } //ejemplo: echo convertirBBcode("[b]letra negrita[/b]"); ?>
Úselas con moderación 😉
Muy bueno!!!
Gracias x compartir
[…] tenéis un enlace muy interesante con las expresiones regulares más comunes que normalmente debemos […]