Las Expresiones Regulares más usadas en PHP

Por EducaciónIT
- 31/01/2024
3 minutos de lectura

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 😉

Categoría
Artículo escrito por: EducaciónIT

2 comments on “Las Expresiones Regulares más usadas en PHP”

Deja un comentario