Ir para conteúdo principal

Expressões regulares e validação de dados em formulários

Os formulários do MyDocSafe suportam expressões regulares.

O que são expressões regulares e como utilizá-las?

Uma expressão regular, ou regex, é um padrão que descreve uma determinada sequência de texto. Por exemplo, para garantir que a pessoa que preenche um formulário introduz exatamente o texto pretendido, pode utilizar uma expressão regular para impor um determinado padrão de entrada ou validar os dados.

Por exemplo, suponha que pretende solicitar um Número de Seguro Nacional do Reino Unido (NIN). O seu padrão consiste em 2 caracteres, seguidos de 6 dígitos e de outro carácter. Uma expressão regular correspondente a este padrão seria:

[a-z|A-Z]{2}[0-9]{6}[a-z|A-Z]

Aqui, [a-z] significa "qualquer carácter minúsculo", [A-Z] significa "qualquer carácter maiúsculo", | significa ou, pelo que [a-z|A-Z] significa "qualquer carácter", {2} significa "repetir duas vezes", etc.

Alguns governos disponibilizam expressões regulares para padrões de utilização frequente. Por exemplo, consulte este artigo da Wikipedia sobre os códigos postais do Reino Unido.

Para uma referência rápida sobre expressões regulares, pesquise por um 'Guia de expressões regulares' ou continue a ler.

Carácter

Legenda

Exemplo

Exemplo de correspondência

\d

Na maioria dos motores: um dígito
de 0 a 9

file_\d\d

file_25

\d

.NET, Python 3: um dígito Unicode em qualquer sistema de escrita

file_\d\d

file_9੩

\w

Na maioria dos motores: "carácter de palavra": letra ASCII, dígito ou sublinhado

\w-\w\w\w

A-b_1

\w

.Python 3: "carácter de palavra": letra Unicode, ideograma, dígito ou sublinhado

\w-\w\w\w

字-ま_۳

\w

.NET: "carácter de palavra": letra Unicode, ideograma, dígito ou conector

\w-\w\w\w

字-ま‿۳

\s

Na maioria dos motores: "carácter de espaço em branco": espaço, tabulação, nova linha, retorno de carro, tabulação vertical

a\sb\sc

a b
c

\s

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

a\sb\sc

a b
c

\D

Um carácter que não é um dígito, conforme definido por \d no motor utilizado

\D\D\D

ABC

\W

Um carácter que não é um carácter de palavra, conforme definido por \w no motor utilizado

\W\W\W\W\W

*-+=)

\S

Um carácter que não é um carácter de espaço em branco, conforme definido por \s no motor utilizado

\S\S\S\S

Yoyo

Quantificadores

Quantificador

Legenda

Exemplo

Exemplo de correspondência

+

Uma ou mais vezes

Version \w-\w+

Version A-b1_1

{3}

Exatamente três vezes

\D{3}

ABC

{2,4}

Duas a quatro vezes

\d{2,4}

156

{3,}

Três ou mais vezes

\w{3,}

regex_tutorial

*

Zero ou mais vezes

A*B*C*

AAACC

?

Uma vez ou nenhuma

plurals?

plural

Mais caracteres

Carácter

Legenda

Exemplo

Exemplo de correspondência

.

Qualquer carácter exceto uma quebra de linha

a.c

abc

.

Qualquer carácter exceto uma quebra de linha

.*

whatever, man.

\.

Um ponto (carácter especial: tem de ser precedido por \ para ser tratado como literal)

a\.c

a.c

\

Permite tratar um carácter especial como literal

\.\*\+\? \$\^\/\\

.*+? $^/\

\

Permite tratar um carácter especial como literal

\[\{\(\)\}\]

[{()}]

Lógica

Lógica

Legenda

Exemplo

Exemplo de correspondência

|

Alternância / operando OU

22|33

33

( … )

Grupo de captura

A(nt|pple)

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 sem captura

A(?:nt|pple)

Apple

Mais caracteres de espaço em branco

​

Carácter

Legenda

Exemplo

Exemplo de correspondência

\t

Tabulação

T\t\w{2}

T ab

\r

Carácter de retorno de carro

ver abaixo

\n

Carácter de avanço de linha

ver abaixo

\r\n

Separador de linhas no Windows

AB\r\nCD

AB
CD

\N

Perl, PCRE (C, PHP, R…): um carácter que não é uma quebra de linha

\N+

ABC

\h

Perl, PCRE (C, PHP, R…), Java: um carácter de espaço em branco horizontal: tabulação ou separador de espaço Unicode

\H

Um carácter que não é um espaço em branco horizontal

\v

.NET, JavaScript, Python, Ruby: tabulação vertical

\v

Perl, PCRE (C, PHP, R…), Java: um carácter de espaço em branco vertical: avanço de linha, retorno de carro, tabulação vertical, avanço de página, separador de parágrafo ou de linha

\V

Perl, PCRE (C, PHP, R…), Java: qualquer carácter que não é um espaço em branco vertical

\R

Perl, PCRE (C, PHP, R…), Java: uma quebra de linha (o par retorno de carro + avanço de linha e todos os caracteres que correspondem a \v)

Mais quantificadores

Quantificador

Legenda

Exemplo

Exemplo de correspondência

+

O + (uma ou mais vezes) é "guloso"

\d+

12345

?

Torna os quantificadores "preguiçosos"

\d+?

1 em 12345

*

O * (zero ou mais vezes) é "guloso"

A*

AAA

?

Torna os quantificadores "preguiçosos"

A*?

vazio em AAA

{2,4}

Duas a quatro vezes, "guloso"

\w{2,4}

abcd

?

Torna os quantificadores "preguiçosos"

\w{2,4}?

ab em abcd

Classes de caracteres

Carácter

Legenda

Exemplo

Exemplo de correspondência

[ … ]

Um dos caracteres entre parênteses retos

[AEIOU]

Uma vogal maiúscula

[ … ]

Um dos caracteres entre parênteses retos

T[ao]p

Tap ou Top

-

Indicador de intervalo

[a-z]

Uma letra minúscula

[x-y]

Um dos caracteres no intervalo de x a y

[A-Z]+

GREAT

[ … ]

Um dos caracteres entre parênteses retos

[AB1-5w-z]

Um dos seguintes: A,B,1,2,3,4,5,w,x,y,z

[x-y]

Um dos caracteres no intervalo de x a y

[ -~]+

Caracteres na secção imprimível da tabela ASCII.

[^x]

Um carácter que não é x

[^a-z]{3}

A1!

[^x-y]

Um dos caracteres que não pertencem ao intervalo de x a y

[^ -~]+

Caracteres que não estão na secção imprimível da tabela ASCII.

[\d\D]

Um carácter que é um dígito ou um carácter não numérico

[\d\D]+

Quaisquer caracteres, incluindo
novas linhas, às quais o ponto normal não corresponde

[\x41]

Corresponde ao carácter na posição hexadecimal 41 da tabela ASCII, ou seja, A

[\x41-\x45]{3}

ABE


​

Âncoras e limites

Âncora

Legenda

Exemplo

Exemplo de correspondência

^

Início da cadeia de caracteres ou início da linha, consoante o modo multilinha. (Mas, quando está [^dentro de parênteses retos], significa "não")

^abc .*

abc (início da linha)

$

Fim da cadeia de caracteres ou fim da linha, consoante o modo multilinha. Existem muitas particularidades que dependem do motor.

.*? the end$

this is the end

\A

Início da cadeia de caracteres
(todos os principais motores, exceto JS)

\Aabc[\d\D]*

abc (início...
...da cadeia de caracteres)

\z

Fim absoluto da cadeia de caracteres
Não disponível em Python e JS

the end\z

this is...\n...the end

\Z

Fim da cadeia de caracteres ou (exceto em Python) antes da última quebra de linha
Não disponível em JS

the end\Z

this is...\n...the end\n

\G

\b

Limite de palavra
Na maioria dos motores: posição em que apenas um dos lados é uma letra ASCII, um dígito ou um sublinhado

Bob.*\bcat\b

Bob ate the cat

\b

Limite de palavra
.NET, Java, Python 3, Ruby: posição em que apenas um dos lados é uma letra Unicode, um dígito ou um sublinhado

Bob.*\b\кошка\b

Bob ate the кошка

\B

c.*\Bcat\B.*

copycats

Isto respondeu à sua pergunta?