Usuario:ManuelRomero/ProgramacionWeb/INAEM2021/Expresiones R
Contenido
Expresiones Regulares (ER)
Una expresión regular es un patrón de búsqueda formado por un conjunto de caracteres que siguen unas reglas. Sirve para comprobar si una cadena de texto cumple o no cumple ese patrón.
Las expresiones regulares son muy útiles para validar datos como teléfonos, emails, URLs, códigos postales, etc.
Podemos usar una expresión regular para dos tipos de comprobación:
1. Coincidencia exacta: la cadena debe ajustarse completamente al patrón. 2. Coincidencia parcial: la cadena solo debe contener el patrón en alguna parte.
Antes de ver ejemplos, es necesario saber cómo se escribe una expresión regular en PHP y cómo se utiliza con funciones como preg_match(), preg_replace() o preg_split().
Delimitadores
Una expresión regular en PHP debe estar rodeada por un carácter delimitador, que marca el inicio y el final del patrón. Este carácter es de elección libre, siempre que no entre en conflicto con el contenido del propio patrón.
El delimitador es imprescindible porque PHP necesita una forma inequívoca de saber que el primer parámetro de funciones como preg_match(), preg_replace() o preg_split() es una expresión regular y no una cadena, un número o una constante. Si no hubiera delimitadores, PHP no podría distinguir el patrón del resto del código.
Además, los delimitadores permiten añadir modificadores al final del patrón (como i para mayúsculas/minúsculas o m para modo multilínea). También es habitual elegir un delimitador que no aparezca dentro del propio patrón para evitar tener que escaparlo.
/una expresión/ // Carácter delimitador / #^[^0-9]$# // Carácter delimitador # +php+ // Carácter delimitador + %[a-zA-Z0-9_-]% // Carácter delimitador %
Expresando la expresión regular=
Para escribir una expresión regular podemos usar caracteres literales (tal cual) o bien emplear metacaracteres, rangos y agrupamientos que permiten definir patrones más complejos.
En la siguiente tabla se resumen los metacaracteres más habituales. Tabla basada en el material de: http://www.mclibre.org/consultar/php/lecciones/php_expresiones_regulares.html
| Patrón | Significado |
|---|---|
| c | carácter literal c |
| . | cualquier carácter |
| ^c | la cadena debe empezar por el carácter c |
| c$ | la cadena debe terminar por el carácter c |
| c+ | uno o más caracteres c |
| c* | cero o más caracteres c |
| c? | cero o un carácter c |
| \n | nueva línea |
| \t | tabulador |
| \ | carácter de escape para escribir caracteres especiales:
^ . [ ] % ( ) | * ? { } \ |
| (cd) | agrupación: los caracteres c y d juntos |
| c|d | carácter c o carácter d |
| c{n} | exactamente n repeticiones del carácter c |
| c{n,} | n o más repeticiones del carácter c |
| c{n,m} | entre n y m repeticiones del carácter c |
| [a-z] | cualquier letra minúscula |
| [A-Z] | cualquier letra mayúscula |
| [0-9] | cualquier dígito |
| [cde] | cualquiera de los caracteres c, d o e |
| [c-f] | cualquier letra entre c y f (c, d, e o f) |
| [^c] | cualquier carácter que no sea c |
| [[:alnum:]] | cualquier letra o dígito |
| [[:alpha:]] | cualquier letra |
| [[:digit:]] | cualquier dígito |
| [[:lower:]] | cualquier letra minúscula |
| [[:punct:]] | cualquier signo de puntuación |
| [[:space:]] | cualquier espacio en blanco |
| [[:upper:]] | cualquier letra mayúscula |
Expresiones regulares en PHP
Son varias las funciones relacionadas con expresiones regulares en PHP: http://php.net/manual/es/book.pcre.php
La función más utilizada es preg_match($expresion, $cadena), que permite comprobar si una cadena cumple (o no) una expresión regular. http://php.net/manual/es/function.preg-match.php
Coincidencia exacta o solo que contenga
Es muy importante distinguir entre:
- Coincidencia parcial: la cadena contiene el patrón en algún punto.
- Coincidencia exacta: la cadena debe coincidir por completo con el patrón (inicio y fin).
La expresión siguiente especifica una cadena que **contenga** uno o más números:
$exp = /[0-9]+/;
Ejemplos:
$cad1 = "asdfljoieka1asdf"; // Cumple: contiene un número $cad2 = "1"; // Cumple $cad3 = "134124"; // Cumple $cad4 = "asdfasd4"; // Cumple $cad5 = "asdfasd"; // No cumple
Si queremos que la cadena solo contenga números:
- debe empezar por un número → ^
- debe terminar por un número → $
$exp = /^[0-9]+$/;
En el ejemplo anterior, solo $cad3 cumple esta expresión.
|
| Validar expresiones Regulares (Código) | ||
|---|---|---|
<!DOCTYPE html> <!-- Ejemplo de validación con expresiones regulares --> <?php if ($_POST['enviar']) { $expresion = filter_input(INPUT_POST, "expresion"); $cadena = filter_input(INPUT_POST, "cadena"); if (preg_match("/$exp/", $cad)) $msg = <<<FIN <label><strong>$cadena</strong> cumple la expresión <strong>$expresion</strong> </label> FIN; else $msg = <<<FIN <label><strong>$cadena</strong> NO cumple la expresión <strong>$expresion</strong> </label> FIN; } ?> <html> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" type="text/css" href="estilo.css" media="screen" /> </head> <body> <fieldset> <legend>Validar expresiones regulares</legend> <form action="." method="POST"> <label for="expresion">Expresión</label> <input type="text" name="expresion" value="<?= $expresion ??""; ?>"><br> <label for="cadena">Cadena</label> <input type="text" name="cadena" value="<?= $cadena ??"";><br> <input type="submit" name="enviar" value="Enviar"> <?php echo $msg; ?> </form> </fieldset> </body> </html>
|
