Plantilla:PHP/ExpresionesRegulares

De WikiEducator
Saltar a: navegación, buscar
  1. 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), algo que sería imposible sin esta marca de inicio y fin. Por último, 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 y construcciones 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 (de principio a fin).

Para entender esta diferencia, veamos el siguiente ejemplo:

La expresión regular siguiente especifica una cadena que **contenga** uno o más números:

$exp = /[0-9]+/;

Analicemos algunas cadenas:

$cad1 = "asdfljoieka1asdf"; // Cumple: contiene el número 1
$cad2 = "1";               // Cumple
$cad3 = "134124";          // Cumple
$cad4 = "asdfasd4";        // Cumple: contiene el número 4
$cad5 = "asdfasd";         // No cumple: no tiene ningún número

Sin embargo, si queremos especificar que la cadena **solo** contenga números, entonces debemos indicar que:

  • la cadena **empiece** por un número → `^`
  • la cadena **termine** por un número → `$`

Por ejemplo:

$exp = /^[0-9]+$/;

En este caso, solo la cadena **$cad3** cumple la expresión, ya que es la única formada únicamente por números.






Icon activity.jpg
Validar expresiones regulares
  • Realiza un programa que permita insertar una expresión regular y una cadena.
  • Posteriormente debe validarse si la cadena cumple o no la expresión regular.








Icon activity.jpg
Practica con expresiones regulares
Realiza una app que valide datos de entrada de un formulario
  • La aplicación va a validar los siguientes items

Formulario datos personales.png