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:
1. Validar Nombre de usuario
<?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"; } ?>
2. Validar Dirección Email
<?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"; } ?>
3. Validar Fecha
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"; } ?>
4. Validar Dirección IP
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"; } ?>
5. Validar Numero de Teléfono
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"; } ?>
6. Remplazar URL por un link
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"); ?>
7. Limpiar palabras groseras
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"); ?>
8. Eliminar código Javascript
<?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>"); ?>
9. Remplazar BBcode por HTML
<?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 😉
- Encuesta septiembre 2021: ¿Cómo crees que afectan las tecnologías de la información en la educación? – 6 septiembre, 2021
- ¡Ya llega Programmer’s Week 2021! – 3 septiembre, 2021
- Encuesta agosto 2021: ¿En qué sector IT te desarrollas o te gustaría desarrollarte? – 6 agosto, 2021
Deja una respuesta