Regular expressions and data validation in forms
Expresiones regulares y validación de datos en formularios
¿Qué son las expresiones regulares y cómo utilizarlas?
Una expresión regular, o regex para abreviar, es un patrón que describe una cantidad determinada de texto. Por ejemplo, si desea asegurarse de que quien completa un formulario envíe exactamente el texto requerido, puede usar una expresión regular para imponer un patrón específico en la entrada o para validar los datos.
Por ejemplo, supongamos que desea solicitar un Número de la Seguridad Social del Reino Unido (NIN). Este tiene un patrón de 2 caracteres, seguidos de 6 dígitos y, a continuación, de otro carácter. Una expresión regular que corresponde a este patrón sería:
[az|AZ]{2}[0-9]{6}[az|AZ]
Aquí [az] significa "cualquier carácter en minúscula", [AZ] significa "cualquier carácter en mayúscula", | significa o, entonces [az|AZ] significa "cualquier carácter", {2} significa "repetir dos veces", etc.
Algunos gobiernos proporcionan expresiones regulares para patrones de uso común. Por ejemplo, consulte este artículo de Wikipedia sobre los códigos postales del Reino Unido.
Para obtener una hoja de trucos rápida sobre expresiones regulares, busque una 'Guía de expresiones regulares' o siga leyendo.
Personaje | Leyenda | Ejemplo | Coincidencia de muestra |
|---|---|---|---|
\d | La mayoría de los motores: un dígito | archivo_\d\d | archivo_25 |
\d | .NET, Python 3: un dígito Unicode en cualquier script | archivo_\d\d | archivo_9 |
\w | La mayoría de los motores: "carácter de palabra": letra ASCII, dígito o guión bajo | \w-\w\w\w | A-b_1 |
\w | .Python 3: "carácter de palabra": letra Unicode, ideograma, dígito o guión bajo | \w-\w\w\w | 字-ま_۳ |
\w | .NET: "carácter de palabra": letra Unicode, ideograma, dígito o conector | \w-\w\w\w | 字-ま‿۳ |
\s | La mayoría de los motores: "carácter de espacio en blanco": espacio, tabulación, nueva línea, retorno de carro, tabulación vertical | a\sb\sc | desde |
\s | .NET, Python 3, JavaScript: "carácter de espacio en blanco": cualquier separador Unicode | a\sb\sc | desde |
\D | Un carácter que no es un dígito según lo definido por el \d de su motor | \D\D\D | abecedario |
\W | Un carácter que no es un carácter de palabra según lo definido por el \w de su motor | \W\W\W\W\W | *-+=) |
\S | Un carácter que no sea un carácter de espacio en blanco según lo definido por el \s de su motor | \S\S\S\S | Yoyó |
Cuantificadores
Cuantificador | Leyenda | Ejemplo | Coincidencia de muestra |
|---|---|---|---|
+ | Uno o más | Versión \w-\w+ | Versión A-b1_1 |
{3} | Exactamente tres veces | \D{3} | abecedario |
{2,4} | De dos a cuatro veces | \d{2,4} | 156 |
{3,} | Tres o más veces | \w{3,} | tutorial de expresiones regulares |
* | Cero o más veces | ABECEDARIO* | AAACC |
? | Una vez o ninguna | ¿plurales? | plural |
Más personajes
Personaje | Leyenda | Ejemplo | Coincidencia de muestra |
|---|---|---|---|
. | Cualquier carácter excepto salto de línea | C.A | abecedario |
. | Cualquier carácter excepto salto de línea | .* | Lo que sea, hombre. |
\ . | Un punto (carácter especial: debe escaparse con un \) | C.A | C.A |
\ | Escapa de un carácter especial | \.\*\+\? \$\^\/\\ | .*+? $^/\ |
\ | Escapa de un carácter especial | \[\{\(\)\}\] | [{()}] |
Lógica
Lógica | Leyenda | Ejemplo | Coincidencia de muestra |
|---|---|---|---|
| | Alternancia / operando OR | 22|33 | 33 |
( … ) | Grupo de captura | Una(hormiga|manzana) | Apple (captura "pple") |
\1 | Contenido del Grupo 1 | r(\w)g\1x | expresiones regulares |
\2 | Contenido del Grupo 2 | (\d\d)\+(\d\d)=\2\+\1 | 12+65=65+12 |
(?: … ) | Grupo que no captura | A(?:nt|manzana) | Manzana |
Más espacios en blanco
Personaje | Leyenda | Ejemplo | Coincidencia de muestra |
|---|---|---|---|
\t | Pestaña | T_t_w{2} | Pestaña |
\r | Carácter de retorno de carro | vea abajo | |
\norte | Carácter de avance de línea | vea abajo | |
\r\n | Separador de línea en Windows | AB\r\nCD | AB |
\NORTE | Perl, PCRE (C, PHP, R…): un carácter que no sea un salto de línea | \N+ | abecedario |
\h | Perl, PCRE (C, PHP, R…), Java: un carácter de espacio horizontal: tabulación o separador de espacio Unicode | ||
\H | Un carácter que no sea un espacio horizontal | ||
\v | .NET, JavaScript, Python, Ruby: pestaña vertical | ||
\v | Perl, PCRE (C, PHP, R…), Java: un carácter de espacio vertical: avance de línea, retorno de carro, tabulación vertical, avance de página, separador de párrafo o línea | ||
\V | Perl, PCRE (C, PHP, R…), Java: cualquier carácter que no sea un espacio vertical | ||
\R | Perl, PCRE (C, PHP, R…), Java: un salto de línea (par retorno de carro + avance de línea y todos los caracteres coincidentes con \v) |
Más cuantificadores
Cuantificador | Leyenda | Ejemplo | Coincidencia de muestra |
|---|---|---|---|
+ | El + (uno o más) es "codicioso" | \d+ | 12345 |
? | Hace que los cuantificadores sean "perezosos" | \d+? | 1 en 1 2345 |
* | El * (cero o más) es "codicioso" | A* | AAA |
? | Hace que los cuantificadores sean "perezosos" | A*? | vacío en AAA |
{2,4} | De dos a cuatro veces, "codicioso" | \w{2,4} | abcd |
? | Hace que los cuantificadores sean "perezosos" | \w{2,4}? | ab en ab cd |
Clases de personajes
Personaje | Leyenda | Ejemplo | Coincidencia de muestra |
|---|---|---|---|
[ … ] | Uno de los personajes entre paréntesis | [AEIOU] | Una vocal mayúscula |
[ … ] | Uno de los personajes entre paréntesis | T[ao]p | Toque o Top |
- | Indicador de rango | [Arizona] | Una letra minúscula |
[xy] | Uno de los caracteres en el rango de x a y | [AZ]+ | EXCELENTE |
[ … ] | Uno de los personajes entre paréntesis | [AB1-5w-z] | Uno de los siguientes: A, B, 1, 2, 3, 4, 5, w, x, y, z |
[xy] | Uno de los caracteres en el rango de x a y | [ -~]+ | Caracteres en la sección imprimible de la tabla ASCII . |
[^x] | Un personaje que no sea x | [^az]{3} | ¡A1! |
[^xy] | Uno de los caracteres que no está en el rango de x a y | [^ -~]+ | Caracteres que no están en la sección imprimible de la tabla ASCII . |
[\d\D] | Un carácter que es un dígito o no es un dígito | [\d\D]+ | Cualquier personaje, inc- |
[\x41] | Coincide con el carácter en la posición hexadecimal 41 en la tabla ASCII, es decir, A | [\x41-\x45]{3} | ABE |
Anclas y límites
Ancla | Leyenda | Ejemplo | Coincidencia de muestra |
|---|---|---|---|
^ | Inicio de cadena o inicio de línea , según el modo multilínea. (Pero cuando [^entre corchetes], significa "no") | ^abc .* | abc (inicio de línea) |
$ | Fin de cadena o fin de línea según el modo multilínea. Numerosas sutilezas dependientes del motor. | .*? el fin$ | Este es el final |
\A | Comienzo de la cadena | \Aabc[\d\D]* | abc (cadena... |
\z | Al final de la cuerda | el fin\z | este es...\n... el final |
\Z | Fin de cadena o (excepto Python) antes del salto de línea final | el final\Z | esto es...\n... el final \n |
\GRAMO | Inicio de la cadena o fin de la coincidencia anterior | ||
\b | Límite de palabras | Bob.*\bcat\b | Bob se comió al gato |
\b | Límite de palabras | Bob.*\b\кошка\b | Bob se comió la кошка |
\B | c.*\Bcat\B.* | imitadores |