Diferencia entre revisiones de «Plantilla:PHP/ExpresionesRegulares»

De WikiEducator
Saltar a: navegación, buscar
(Expresiones Regulares)
(Coincidencia exacta o solo qué contenga)
 
(20 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 
<div id=parrafo>
 
<div id=parrafo>
===Expresiones Regulares===
+
===Expresiones Regulares (er)===
 
Una expresión regular consiste en establecer un patrón o conjunto de caracteres de manera general. De esta forma podremos comprobar si una determinada expresión compuesta por una serie de caracteres concretos, cumple o no la expresión regular<br />
 
Una expresión regular consiste en establecer un patrón o conjunto de caracteres de manera general. De esta forma podremos comprobar si una determinada expresión compuesta por una serie de caracteres concretos, cumple o no la expresión regular<br />
 
Esta es una técnica extremadamente útil para verificar cualquier tipo de cadena de caracteres, por ejemplo teléfono, email, url, etc.<br />
 
Esta es una técnica extremadamente útil para verificar cualquier tipo de cadena de caracteres, por ejemplo teléfono, email, url, etc.<br />
 
Es importante tener claro que una expresión regular la podemos utilizar para ver si una cadena coincide exactamente con el patrón, o solo lo continene (En este caso podría ser que empezara por una expresión o que terminara por ella, o que estuviera dentro de ella).<br />
 
Es importante tener claro que una expresión regular la podemos utilizar para ver si una cadena coincide exactamente con el patrón, o solo lo continene (En este caso podría ser que empezara por una expresión o que terminara por ella, o que estuviera dentro de ella).<br />
*A continuación algún ejemplo para exponer esta idea
+
Antes de poder ver algún ejemplo, necesitamos saber cómo se expresa una er en php.
 +
 
 
====Delimitadores====
 
====Delimitadores====
 +
*A la hora de expresar una expresión regular debemos de hacerlo usando un carácter delimitador al comienzo y final; Este carácter es de elección libre
 
{{MRM_Recursos de la Web|Title=Delimitadores|
 
{{MRM_Recursos de la Web|Title=Delimitadores|
 
http://php.net/manual/es/regexp.reference.delimiters.php
 
http://php.net/manual/es/regexp.reference.delimiters.php
 
}}
 
}}
*A la hora de expresar una expresión regular debemos de hacerlo usando un carácter delimitador al comienzo y final; Este carácter es de elección libre
 
 
<source lang=php>
 
<source lang=php>
 
/una expresión/  //Carácter delimitador /
 
/una expresión/  //Carácter delimitador /
Línea 16: Línea 17:
 
%[a-zA-Z0-9_-]%  //Carácter delimitador %
 
%[a-zA-Z0-9_-]%  //Carácter delimitador %
 
</source>
 
</source>
{{MRM_Ejemplo|Title=Cadena que contenga algún número|
 
<source lang=php>
 
  
</source>
+
====Expresando la expresión regular====
}}
+
 
*Para especificar las expresiones regulares se puede especificar el carácter tal cual, o usar metacaracteres y agrupamiento de caracteres
 
*Para especificar las expresiones regulares se puede especificar el carácter tal cual, o usar metacaracteres y agrupamiento de caracteres
 
*Ver la siguiente tabla sacada de la dirección http://www.mclibre.org/consultar/php/lecciones/php_expresiones_regulares.html
 
*Ver la siguiente tabla sacada de la dirección http://www.mclibre.org/consultar/php/lecciones/php_expresiones_regulares.html
 
+
<br />
{| align="center" border="2" style="background:orange; color:red"
+
{| align="center" border="1" style=color:red"|-
 
|Patrón  
 
|Patrón  
 
|Significado
 
|Significado
|- style="background:green"
 
|c |carácter c
 
 
|-
 
|-
|.|cualquier carácter
+
|c
 +
|carácter c
 
|-
 
|-
 +
|.
 +
|cualquier carácter|-
 +
|-
 +
|^c
 +
| empezar por el carácter c
 +
|-
 +
|c$
 +
|terminar por el carácter c
 +
|-
 +
|c+
 +
|1 o más caracteres c
 +
|-
 +
|c*
 +
|0 o más caracteres c
 +
|-
 +
|c?
 +
|0 o 1 caracteres c
 +
|-
 +
|\n
 +
|nueva línea
 +
|-
 +
|\t
 +
|tabulador
 +
|-
 +
|<nowiki>\</nowiki>
 +
|escape, para escribir delante de caracteres especiales: <nowiki>^ . [ ] % ( ) | * ? { } \</nowiki>
 +
|-
 +
|(cd)
 +
|caracteres c y d agrupados
 +
|-
 +
|c<nowiki>|</nowiki>d
 +
|carácter c o d
 +
|-
 +
|c{n}
 +
|n veces el carácter c
 +
|-
 +
|c{n,}
 +
|n o más caracteres c
 +
|-
 +
|c{n,m}
 +
|desde n hasta m caracteres 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 (es decir, c, d, e o f)
 +
|-
 +
|[^c]
 +
|que no esté el carácter c
 +
|-
 +
|<nowiki>[[:alnum:]]</nowiki>
 +
|cualquier letra o dígito
 +
|-
 +
|<nowiki>[[:alpha:]]</nowiki>
 +
|cualquier letra
 +
|-
 +
|<nowiki>[[:digit:]]</nowiki>
 +
|cualquier dígito
 +
|-
 +
|<nowiki>[[:lower:]]</nowiki>
 +
|cualquier letra minúscula
 +
|-
 +
|<nowiki>[[:punct:]]</nowiki>
 +
|cualquier marca de puntuación
 +
|-
 +
|<nowiki>[[:space:]]</nowiki>
 +
|cualquier espacio en blanco
 +
|-
 +
|<nowiki>[[:upper:]]</nowiki>
 +
|cualquier letra mayúscula
 
|}
 
|}
<br />
+
====Expresiones regulares en php====
^c empezar por el carácter c
+
Ŝon varias las funciones relacionadas con expresiones regulares en php
c$ terminar por el carácter c
+
http://php.net/manual/es/book.pcre.php
c+ 1 o más caracteres c
+
<br/>
c* 0 o más caracteres c
+
*Usaremos la función '''''preg_match($expresion, $cadena)''''' para comprobar que una cadena cumple una determinada expresión regular
c? 0 o 1 caracteres c
+
http://php.net/manual/es/function.preg-match.php
\n nueva línea
+
====Coincidencia exacta o solo qué contenga====
\t tabulador
+
Es muy importante diferenciar entre que una cadena coincida exactamente con una expresión regular, y que una cadena cumpla una determinada expresión regular.<br />
\ escape, para escribir delante de caracteres especiales: ^ . [ ] % ( ) | * ? { } \
+
Para aclarar este concepto vamos a ver el siguiente ejemplo:
(cd) caracteres c y d agrupados
+
La siguiente expresión regular establece una cadena que contenga 1 o más números.
c|d carácter c o d
+
<source lang=php>
c{n} n veces el carácter c
+
$exp = /[0-9]+/
c{n,} n o más caracteres c
+
</source>
c{n,m} desde n hasta m caracteres 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 (es decir, c, d, e o f)
+
[^c] que no esté el carácter c
+
[[:alnum:]] cualquier letra o dígito
+
[[:alpha:]] cualquier letra
+
[[:digit:]] cualquier dígito
+
[[:lower:]] cualquier letra minúscula
+
[[:punct:]] cualquier marca de puntuación
+
[[:space:]] cualquier espacio en blanco
+
[[:upper:]] cualquier letra mayúscula
+
  
En php el uso es muy sencillo, basta con establecer la expresión regular, y posteriormente usando el método pre_match($expresion, $cadena), verificar si la cadena cumple o no la expresión regular
+
*Observamos las siguientes cadenas
 +
<source lang=php>
 +
$cad1 = "asdfljoieka1asdf"; //No Cumple la expresión $exp porque no tiene ningún número
 +
$cad2 = "1"; //Cumple por que tiene un número
 +
$cad3 = "134124"; //Cumple por que tiene un número
 +
$cad4 = "asdfasdf4"; //Cumple por que tiene un número
 +
$cad5 = "asdfasd"; //No Cumple por que no  tiene un número
 +
</source>
 +
Sin embargo si se quiere especificar, que la cadena sólo contenga números, una forma de especificarlo (por supuesto hay más), estableceremos que comience y termine por números (signo<strong> ^</strong> para el comienzo y <strong>$</strong> para la terminación).
 +
<source lang=php>
 +
$exp = /^[0-9]+$/
 +
</source>
 +
De esta forma, en los ejemplos anteriores, solo la cadena almacenada en la variable $cad3, cumple la expresión regular.
  
 +
{{MRM_Recursos de la Web|
 +
#https://regex101.com/ (Para practicar, propuesta de un compañero de clase.
 +
#https://www.mclibre.org/consultar/php/lecciones/php-expresiones-regulares.html
 +
#http://php.net/manual/es/book.pcre.php
 +
}}
 +
{{MRM_Actividad|Title=Validar expresiones regulares|
 +
*Realiza un programa que permita insertar una expresión regular y una cadena
 +
*Posteriormente hacemos que valide a ver si la cadena cumple o no la expresión regular
 +
{{MRM_Recursos de la Web|Title= Ver el ejercicio funcionando|
 +
http://manuel.infenlaces.com/dwes/Expresiones_Regulares/
 +
}}
  
http://www.mclibre.org/consultar/php/lecciones/php_expresiones_regulares.html
 
http://php.net/manual/es/book.pcre.php
 
{{MRM_Ejercicio|Title=Validar expresiones regulares|
 
 
}}
 
}}
  
{{Plegable|hide|Validar expresiones Regulares|
+
{{Plegable|hide|Validar expresiones Regulares (Código)|
 
<source lang=php>
 
<source lang=php>
 +
<!DOCTYPE html>
 +
<!--
 +
To change this license header, choose License Headers in Project Properties.
 +
To change this template file, choose Tools | Templates
 +
and open the template in the editor.
 +
<?php
 +
if ($_POST['enviar']) {
 +
    $exp = filter_input(INPUT_POST, "expresion");
 +
    $cad = filter_input(INPUT_POST, "cadena");
 +
    if (preg_match("/$exp/", $cad))
 +
        $msg = <<<FIN
 +
            <label><strong>$cad</strong>
 +
            es de la expresión  <strong>$exp</strong>
 +
            </label>
 +
FIN;
 +
    else
 +
        $msg = <<<FIN
 +
            <label><strong>$cad</strong>
 +
            NO es de la expresión  <strong>$exp</strong>
 +
            </label>
 +
FIN;
 +
    // put your code here
 +
}
 +
?>-->
 +
<html>
 +
    <head>
 +
        <meta charset="UTF-8">
 +
        <title></title>
 +
        <link rel="stylesheet" type="text/css" href="estilo.css" media="screen" />
 +
    </head>
 +
    <body>
 +
        <?php
 +
        ?>
 +
        <fieldset>
 +
            <legend>Validar expresiones regulares</legend>
 +
            <form action="." method="POST">
 +
 +
                <label for="expresion">Expresión</label>
 +
                <input type="text" name="expresion" value= "<?= $exp; ?>"  ><br>
 +
                <label for="cadena">Cadena</label>
 +
                <input type="text" name="cadena"><br>
 +
                <input type="submit" name="enviar" value="Enviar">
 +
                <?php echo $msg; ?>
 +
            </form>
 +
        </fieldset>
 +
    </body>
 +
</html>
 +
</source>
 +
{{Plegable|hide|Hoja de estilo|
 +
<source lang=css>
 +
 +
fieldset{
 +
    border: 0.25em solid;
 +
    position: absolute;
 +
    left: 20%;
 +
    top: 15%;
 +
    padding:10px;
 +
    background-color: #eee;
 +
}
 +
legend{
 +
    font-size: 2em;
 +
    color: green;
 +
    font-weight: bold;
 +
}
 +
input[type=submit] {
 +
    padding:5px 15px 10px 10px;
 +
    background:#ccc;
 +
    border:2;
 +
    cursor:pointer;
 +
    -webkit-border-radius: 5px;
 +
    border-radius: 5px;
 +
    margin: 1em;
 +
    font-size: 1.5em;
 +
}
 +
label{
 +
    font-size : 1.5em;
 +
    margin: 0.65em;
 +
 +
}
 +
input[type=text]{
 +
    padding: 1em 1em 1em 1em;
 +
    margin: 1em 1em 1em 1em;
 +
}
 +
 +
</source>
 +
 +
 +
}}
 +
}}
  
</source>}}
 
 
</div>
 
</div>
 +
{{MRM_Actividad|Title=Practica con expresiones regulares|
 +
;Realiza una app que valide  datos de entrada de un formulario
 +
*La aplicación va a validar los siguientes items
 +
[[archivo:formulario_datos_personales.png]]
 +
 +
}}

Última revisión de 17:36 27 nov 2023

Expresiones Regulares (er)

Una expresión regular consiste en establecer un patrón o conjunto de caracteres de manera general. De esta forma podremos comprobar si una determinada expresión compuesta por una serie de caracteres concretos, cumple o no la expresión regular
Esta es una técnica extremadamente útil para verificar cualquier tipo de cadena de caracteres, por ejemplo teléfono, email, url, etc.
Es importante tener claro que una expresión regular la podemos utilizar para ver si una cadena coincide exactamente con el patrón, o solo lo continene (En este caso podría ser que empezara por una expresión o que terminara por ella, o que estuviera dentro de ella).
Antes de poder ver algún ejemplo, necesitamos saber cómo se expresa una er en php.

Delimitadores

  • A la hora de expresar una expresión regular debemos de hacerlo usando un carácter delimitador al comienzo y final; Este carácter es de elección libre



/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


Patrón Significado
c carácter c
. -
^c empezar por el carácter c
c$ terminar por el carácter c
c+ 1 o más caracteres c
c* 0 o más caracteres c
c? 0 o 1 caracteres c
\n nueva línea
\t tabulador
\ escape, para escribir delante de caracteres especiales: ^ . [ ] % ( ) | * ? { } \
(cd) caracteres c y d agrupados
c|d carácter c o d
c{n} n veces el carácter c
c{n,} n o más caracteres c
c{n,m} desde n hasta m caracteres 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 (es decir, c, d, e o f)
[^c] que no esté el carácter c
[[:alnum:]] cualquier letra o dígito
[[:alpha:]] cualquier letra
[[:digit:]] cualquier dígito
[[:lower:]] cualquier letra minúscula
[[:punct:]] cualquier marca de puntuación
[[:space:]] cualquier espacio en blanco
[[:upper:]] cualquier letra mayúscula

Expresiones regulares en php

Ŝon varias las funciones relacionadas con expresiones regulares en php

http://php.net/manual/es/book.pcre.php


  • Usaremos la función preg_match($expresion, $cadena) para comprobar que una cadena cumple una determinada expresión regular
http://php.net/manual/es/function.preg-match.php

Coincidencia exacta o solo qué contenga

Es muy importante diferenciar entre que una cadena coincida exactamente con una expresión regular, y que una cadena cumpla una determinada expresión regular.
Para aclarar este concepto vamos a ver el siguiente ejemplo:

La siguiente expresión regular establece una cadena que contenga 1 o más números. 
$exp = /[0-9]+/
  • Observamos las siguientes cadenas
$cad1 = "asdfljoieka1asdf"; //No Cumple la expresión $exp porque no tiene ningún número
$cad2 = "1"; //Cumple por que tiene un número
$cad3 = "134124"; //Cumple por que tiene un número
$cad4 = "asdfasdf4"; //Cumple por que tiene un número
$cad5 = "asdfasd"; //No Cumple por que no  tiene un número

Sin embargo si se quiere especificar, que la cadena sólo contenga números, una forma de especificarlo (por supuesto hay más), estableceremos que comience y termine por números (signo ^ para el comienzo y $ para la terminación).

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

De esta forma, en los ejemplos anteriores, solo la cadena almacenada en la variable $cad3, cumple la expresión regular.





Icon activity.jpg
Validar expresiones regulares
  • Realiza un programa que permita insertar una expresión regular y una cadena
  • Posteriormente hacemos que valide a ver 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