Expressões regulares e validação de dados em formulários
Expressões regulares e validação de dados em formulários
O que são expressões regulares e como usá-las?
Uma expressão regular, ou regex, é um padrão que descreve uma determinada quantidade de texto. Por exemplo, se você quiser garantir que a pessoa que preenche um formulário envie exatamente o texto que você exige, pode usar uma expressão regular para impor um determinado padrão na entrada ou para validar os dados.
Por exemplo, digamos que você queira solicitar um Número de Seguro Nacional do Reino Unido (NIN). Ele segue um padrão de 2 caracteres, seguidos por 6 dígitos e, em seguida, outro caractere. Uma expressão regular que corresponde a esse padrão seria:
[az|AZ]{2}[0-9]{6}[az|AZ]
Aqui [az] significa "qualquer caractere minúsculo", [AZ] significa "qualquer caractere maiúsculo", | significa ou, então [az|AZ] significa "qualquer caractere", {2} significa "repetir duas vezes" etc.
Alguns governos fornecem expressões regulares para padrões de uso comum. Por exemplo, veja este artigo da Wikipédia sobre códigos postais do Reino Unido.
Para um guia rápido sobre expressões regulares, procure por um "Guia de Expressões Regulares" ou continue lendo.
Personagem | Lenda | Exemplo | Correspondência de amostra |
|---|---|---|---|
\d | A maioria dos motores: um dígito | arquivo_\d\d | arquivo_25 |
\d | .NET, Python 3: um dígito Unicode em qualquer script | arquivo_\d\d | arquivo_9੩ |
\c | A maioria dos motores de busca considera "caractere de palavra" como uma letra ASCII, um dígito ou um sublinhado. | \w-\w\w\w | A-b_1 |
\c | Python 3: "caractere de palavra": letra Unicode, ideograma, dígito ou sublinhado | \w-\w\w\w | 字-ま_۳ |
\c | .NET: "caractere de palavra": letra Unicode, ideograma, dígito ou conector | \w-\w\w\w | 字-ま‿۳ |
\s | Na maioria dos motores de busca: "caractere de espaço em branco": espaço, tabulação, nova linha, retorno de carro, tabulação vertical | a\sb\sc | ab |
\s | .NET, Python 3, JavaScript: "caractere de espaço em branco": qualquer separador Unicode | a\sb\sc | ab |
\D | Um caractere que não seja um dígito conforme definido pelo \d do seu mecanismo de busca. | \D\D\D | abc |
\C | Um caractere que não seja um caractere alfanumérico conforme definido pelo \w do seu mecanismo de busca. | \W\W\W\W\W | *-+=) |
\S | Um caractere que não seja um espaço em branco, conforme definido pelo \s do seu mecanismo de busca. | \S\S\S\S | Ioiô |
Quantificadores
Quantificador | Lenda | Exemplo | Correspondência de amostra |
|---|---|---|---|
+ | Um ou mais | Versão \w-\w+ | Versão A-b1_1 |
{3} | Exatamente três vezes | \D{3} | abc |
{2,4} | De duas a quatro vezes | \d{2,4} | 156 |
{3,} | Três ou mais vezes | \w{3,} | tutorial_regex |
* | Zero ou mais vezes | ABC* | AAACC |
? | Uma vez ou nenhuma | plurais? | plural |
Mais personagens
Personagem | Lenda | Exemplo | Correspondência de amostra |
|---|---|---|---|
. | Qualquer caractere, exceto quebra de linha. | ac | abc |
. | Qualquer caractere, exceto quebra de linha. | .* | Tanto faz, cara. |
\ . | Um ponto (caractere especial: precisa ser escapado com uma barra invertida \) | a\.c | ac |
\ | Escapa de um personagem especial | \.\*\+\? \$\^\/\\ | .*+? $^/\ |
\ | Escapa de um personagem especial | \[\{\(\)\}\] | [{()}] |
Lógica
Lógica | Lenda | Exemplo | Correspondência de amostra |
|---|---|---|---|
| | Operando de alternância/OU | 22|33 | 33 |
( … ) | Grupo de captura | Uma (formiga|maçã) | Apple (captura "pple") |
1 | Conteúdo do Grupo 1 | r(\w)g\1x | regex |
2 | Conteúdo do Grupo 2 | (\d\d)\+(\d\d)=\2\+\1 | 12 + 65 = 65 + 12 |
(?: … ) | Grupo não-capturador | Uma (?:nt|maçã) | Maçã |
Mais espaço em branco
Personagem | Lenda | Exemplo | Correspondência de amostra |
|---|---|---|---|
\t | Aba | T\t\w{2} | Tabela |
\r | Caractere de retorno de carro | Veja abaixo | |
\n | caractere de alimentação de linha | Veja abaixo | |
\r\n | Separador de linhas no Windows | AB\r\nCD | AB |
\N | Perl, PCRE (C, PHP, R…): um caractere que não seja uma quebra de linha | N+ | abc |
\h | Perl, PCRE (C, PHP, R…), Java: um caractere de espaço em branco horizontal: tabulação ou separador de espaço Unicode. | ||
\H | Um caractere que não seja um espaço em branco horizontal. | ||
\v | .NET, JavaScript, Python, Ruby: guia vertical | ||
\v | Perl, PCRE (C, PHP, R…), Java: um caractere de espaço em branco vertical: quebra de linha, retorno de carro, tabulação vertical, alimentação de formulário, separador de parágrafo ou de linha | ||
\V | Perl, PCRE (C, PHP, R…), Java: qualquer caractere que não seja um espaço em branco vertical. | ||
\R | Perl, PCRE (C, PHP, R…), Java: uma quebra de linha (par de retorno de carro + alimentação de linha e todos os caracteres correspondentes a \v) |
Mais Quantificadores
Quantificador | Lenda | Exemplo | Correspondência de amostra |
|---|---|---|---|
+ | O sinal de + (um ou mais) indica "ganância". | \d+ | 12345 |
? | Torna os quantificadores "preguiçosos" | \d+? | 1 em 1 2345 |
* | O * (zero ou mais) é "ganancioso". | UM* | AAA |
? | Torna os quantificadores "preguiçosos" | UM*? | vazio em AAA |
{2,4} | De duas a quatro vezes, "ganancioso" | \w{2,4} | abcd |
? | Torna os quantificadores "preguiçosos" | \w{2,4}? | ab em ab cd |
Classes de Personagem
Personagem | Lenda | Exemplo | Correspondência de amostra |
|---|---|---|---|
[ … ] | Um dos personagens entre parênteses | [AEIOU] | Uma vogal maiúscula |
[ … ] | Um dos personagens entre parênteses | T[ao]p | Toque ou Topo |
- | Indicador de alcance | [az] | Uma letra minúscula |
[xy] | Um dos caracteres no intervalo de x a y | [AZ]+ | ÓTIMO |
[ … ] | Um dos personagens entre parênteses | [AB1-5w-z] | Uma das seguintes opções: A, B, 1, 2, 3, 4, 5, w, x, y, z |
[xy] | Um dos caracteres no intervalo de x a y | [ -~]+ | Caracteres na seção imprimível da tabela ASCII . |
[^x] | Um caractere que não seja x | [^az]{3} | A1! |
[^xy] | Um dos caracteres que não está no intervalo de x a y. | [^ -~]+ | Caracteres que não estão na seção imprimível da tabela ASCII . |
[\d\D] | Um caractere que pode ser um dígito ou um caractere que não seja um dígito. | [\d\D]+ | Quaisquer caracteres, incluindo- |
[\x41] | Corresponde ao caractere na posição hexadecimal 41 da tabela ASCII, ou seja, A. | [\x41-\x45]{3} | ABE |
Âncoras e limites
Âncora | Lenda | Exemplo | Correspondência de amostra |
|---|---|---|---|
^ | Início da string ou início da linha , dependendo do modo multilinha. (Mas quando [^entre colchetes], significa "não"). | ^abc .* | abc (início da linha) |
$ | Fim da sequência ou fim da linha , dependendo do modo multilinhas. Muitas sutilezas variam conforme o mecanismo de renderização. | .*? o fim$ | Este é o fim |
\UM | Início da sequência | \Aabc[\d\D]* | abc (string... |
\z | Extrema extremidade da corda | o fim\z | isto é...\n... o fim |
\Z | Fim da string ou (exceto em Python) antes da quebra de linha final | o fim\Z | isto é...\n... o fim \n |
\G | Início da sequência ou fim da correspondência anterior | ||
\b | Limite da palavra | Bob.*\bcat\b | Bob comeu o gato |
\b | Limite da palavra | Bob.*\b\koshka\b | Bob comeu o кошка |
\B | c.*\Bcat\B.* | imitadores |