Diferencia entre revisiones de «Plantilla:PHP/ExpresionesRegulares»

De WikiEducator
Saltar a: navegación, buscar
(Expresando la expresión regular)
(Coincidencia exacata o qué contenga=)
Línea 126: Línea 126:
 
</source>}}
 
</source>}}
 
}}
 
}}
====Coincidencia exacata o qué contenga=====
+
====Coincidencia exacata o qué contenga====
Es muy importante diferenciar en que es distinto que  una cadena coincida exactamente con una expresión regular aue una cadena cumpla una determinada expresión regular.
+
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 />
Por ejemplo, dada la siguiente expresión regular siguiente indica que una cadena contenga 1 o más números
+
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.
 
<source lang=php>
 
<source lang=php>
 
$exp = /[0-9]+/
 
$exp = /[0-9]+/
 
</source>
 
</source>
*Así las cadenas  observa las siguientes cadenas
+
 
 +
*Observamos las siguientes cadenas
 
<source lang=php>
 
<source lang=php>
 
$cad1 = "asdfljoieka1asdf"; //Cumple por que tiene un número
 
$cad1 = "asdfljoieka1asdf"; //Cumple por que tiene un número
$cad1 = "1"; //Cumple por que tiene un número
+
$cad2 = "1"; //Cumple por que tiene un número
$cad1 = "134124"; //Cumple por que tiene un número
+
$cad3 = "134124"; //Cumple por que tiene un número
$cad1 = "asdfasdf4"; //Cumple por que tiene un número
+
$cad4 = "asdfasdf4"; //Cumple por que tiene un número
$cad1 = "asdfasd"; //No Cumple por que no  tiene un número
+
$cad5 = "asdfasd"; //No Cumple por que no  tiene un número
*Sin embargo si quiero que sólo contnega números, una forma de especificarlo (por supuesto hay más)
+
 
 +
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>
 
<source lang=php>
 
$exp = /^[0-9]+$/
 
$exp = /^[0-9]+$/
 
</source>
 
</source>
 +
De esta forma, en los ejemplos anteriores, solo la cadena almacenada en la variable $cad3, cumple la expresión regular.
  
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
+
{{Recursos de la Web|
+
#http://www.mclibre.org/consultar/php/lecciones/php_expresiones_regulares.html
http://www.mclibre.org/consultar/php/lecciones/php_expresiones_regulares.html
+
#http://php.net/manual/es/book.pcre.php
http://php.net/manual/es/book.pcre.php
+
}}
 
{{MRM_Ejercicio|Title=Validar expresiones regulares|
 
{{MRM_Ejercicio|Title=Validar expresiones regulares|
 
}}
 
}}
Línea 153: Línea 157:
 
{{Plegable|hide|Validar expresiones Regulares|
 
{{Plegable|hide|Validar expresiones Regulares|
 
<source lang=php>
 
<source lang=php>
 +
<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">
  
</source>}}
+
                <label for="expresion">Expresion</label>
 +
                <input type="text" name="expresion"  ><br>
 +
                <label for="cadena">Cadena</label>
 +
                <input type="text" name="cadena"><br>
 +
                <input type="submit" name="enviar" value="Enviar">
 +
                <?php
 +
                if ($_POST['enviar']) {
 +
                    $exp = filter_input(INPUT_POST, "expresion");
 +
                    $cad = filter_input(INPUT_POST, "cadena");
 +
                    if (preg_match("/$exp/", $cad))
 +
                        echo "<label>La Cadena  <strong>$cad</strong>  es de la expresion  <strong>$exp</strong> </label>";
 +
                    else
 +
                        echo "<label>La Cadena  <strong>$cad</strong>  NO es de la expresion  <strong>$exp</strong> </label>";
 +
                    // put your code here
 +
                }
 +
                ?>
 +
            </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-weight: bold;
 +
    font-size : 1.5em;
 +
    margin: 0.65em;
 +
 
 +
}
 +
input[type=text]{
 +
    padding: 1em 1em 1em 1em;
 +
    margin: 1em 1em 1em 1em;
 +
}
 +
 
 +
</source>
 +
 
 +
 
 +
}}
 
</div>
 
</div>

Revisión de 04:58 17 ene 2017

Expresiones Regulares

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).

  • A continuación algún ejemplo para exponer esta idea

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

A continuación se proponen dos actividades para practicar con expresiones regulares


Icon activity.jpg
Verificar cadena con expresiones

Realizar una aplicación que permita tener dos cajas de texto

  • En una insetaremos la expresión regular
  • En la siguiente insertaremos una cadena para ver si cumple o no la expresión regular



Coincidencia exacata o 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"; //Cumple por que tiene un 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<strong> ^</strong> para el comienzo y <strong>$</strong> para la terminación).
<source lang=php>
$exp = /^[0-9]+$/

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




Plantilla:MRM Ejercicio

{{Plegable|hide|Validar expresiones Regulares|

<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">Expresion</label>
                <input type="text" name="expresion"  ><br>
                <label for="cadena">Cadena</label>
                <input type="text" name="cadena"><br>
                <input type="submit" name="enviar" value="Enviar">
                <?php
                if ($_POST['enviar']) {
                    $exp = filter_input(INPUT_POST, "expresion");
                    $cad = filter_input(INPUT_POST, "cadena");
                    if (preg_match("/$exp/", $cad))
                        echo "<label>La Cadena  <strong>$cad</strong>  es de la expresion  <strong>$exp</strong> </label>";
                    else
                        echo "<label>La Cadena  <strong>$cad</strong>  NO es de la expresion  <strong>$exp</strong> </label>";
                    // put your code here
                }
                ?>
            </form>
        </fieldset>
 
    </body>
</html>