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
de 0 a 9

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
c

\s

.NET, Python 3, JavaScript: "caractere de espaço em branco": qualquer separador Unicode

a\sb\sc

ab
c

\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
CD

\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-
incluindo novas linhas, que o ponto normal não corresponde.

[\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
(todos os principais motores, exceto JS)

\Aabc[\d\D]*

abc (string...
...começar)

\z

Extrema extremidade da corda
Não disponível em Python e JS.

o fim\z

isto é...\n... o fim

\Z

Fim da string ou (exceto em Python) antes da quebra de linha final
Não disponível em JS

o fim\Z

isto é...\n... o fim \n

\G

Início da sequência ou fim da correspondência anterior
.NET, Java, PCRE (C, PHP, R…), Perl, Ruby

\b

Limite da palavra
A maioria dos motores: posição onde apenas um lado contém uma letra ASCII, um dígito ou um sublinhado.

Bob.*\bcat\b

Bob comeu o gato

\b

Limite da palavra
.NET, Java, Python 3, Ruby: posição onde apenas um lado contém uma letra Unicode, dígito ou sublinhado.

Bob.*\b\koshka\b

Bob comeu o кошка

\B

Não é uma fronteira de palavras

c.*\Bcat\B.*

imitadores

We use cookies to enhance your browsing experience and analyze site traffic. By clicking "Accept", you consent to our use of cookies. Privacy Policy