Jump to content

Validação básica com Regex (Expressões Regulares)


Postagens Recomendadas

  • Administradores

Tópico originalmente criado por: @Jonathan Santos

Regex é uma linguagem formal que permite identificar padrões de caracteres dentro de um texto. E é muito utiliza em editores para encontrar e manipular pedaços de texto, nós podemos utilizar para identificar trechos específicos dentro de um xml, um csv, dados dentro de um formulário e qualquer fonte de texto.

Segue abaixo alguns exemplos da forma mais simples até um ponto mais recomendado, você pode testar usando o site rubular.com 3 para acompanhar os exemplos:

Dígitos numéricos com Regex : Quando queremos nos referir a dígitos em um pattern, colocamos uma abreviação de dígito = \d

Por exemplo, para exigir que um campo de CPF tenha 11 dígitos, colocaria:

pattern="\d\d\d\d\d\d\d\d\d\d" 

Porém, neste padrão acima, ficaria muito custoso manter pelo tanto de repetição e passível de falhas, então para facilitar, pode-se utilizar o recurso de repetição em regex, que é colocar entre chaves o número de repetições desejadas ou limitada:

Este mesmo padrão é equivalente ao de cima, muito mais simples de manter e entender.

pattern="\d{11}" 

Para validarmos o caracter if no final do cpf podemos utilizar o operador? que serve para dizer que pode ou não ter este caracter, ficando assim:

Aqui teremos três blocos de 3 dígitos, o hífen e o operador? que indica que o hífen é opcional, pode ou não existir.

pattern="\d{3}.\d{3}.\d{3}-?\d{2}" 

Dígitos literais e conjuntos com Regex :

Indica que podemos usar qualquer letra do alfabeto no intervalo de a até z.

Para letras do alfabeto neste intervalo:

pattern="[a-z]"
pattern="[A-Z]" 

Para se utilizar o comum é [a-zA-Z] esse grupo ja indica de forma agrupada todas letras.

E para utilizar esse grupo de letras com números, basta colocar o indicador de dígitos que é o \d ficando:

pattern="[a-zA-Z\d]"

E para funcionar com qualquer palavra utilizamos o operador + que indica que uma ou mais letras deste mesmo grupo ficando.

pattern="[a-zA-Z\d]+"

Exemplo simples de validação de email:

pattern="[a-zA-Z\d]+@[a-zA-Z\d]+\.[a-zA-Z\d]+\.[a-zA-Z\d]+" 

E para melhorar a forma de validação acima que está muito repetitiva.

Usamos o operador \w que é equivalente ao [a-zA-Z\d_] que representa uma “word”.

pattern="\w+@\w+\.\w+\.?\w?\w?+" 

E para melhorar ainda podemos utilizar o caractere especial *, que é o equivalente ao caractere ? e o +. Utilizando o * o caractere antes dele pode ser presente ou não e pode aparecer mais de uma vez ou não também.

 pattern="\w*@\w*\.\w*\.\w*" 

Como tratar grupos em regex:

exemplo cartão de crédito: 9999-9999-9999-9999

Forma sem agrupamento

pattern="\d{4}[ -]\d{4}[ -]\d{4}[ -]\d{4}" 

Neste grupo acima podemos notar que várias partes se repetem então podemos agrupar utilizar o () entre as partes identificadas exemplo:

\d{4} = indica teremos 4 dígitos iniciais

([ -]\d{4}) = indica que este grupo pode se repetir na expressão

{3} = e para finalizar nesse pattern, este indica que este grupo pode se repetir 3 vezes.

pattern="\d{4}([ -]\d{4}){3}" 

Este post é apenas o básico desta linguagem formal, que seu uso cresce a cada dia dentre nós desenvolvedores.

Link to comment
Compartilhe em outros sites

  • Karina Harumi destacou, tirou o destaque, pinned, unpinned, locked and unlocked deste tópico
  • 9 months later...

Olá,

Estou precisando criar uma expressão onde não permita 0 a esquerda e que limite de 1 a 4 ou 9 números.

Eu consegui criar ambas, porém separadas e não sei como seria para unificar as 2 regras.

^([0-9]{1}|[1-9]{2}||[1-9]{3}||[1-9]{4}|[1-9]{9})$ Aqui estou limitando os caracteres porém não consegui remover o 0.

^(0|[1-9][0-9]*)$ Aqui estou limitando o 0 a esquerda mas não consegui inserir limite de caracteres.

Alguém poderia me auxiliar?

Link to comment
Compartilhe em outros sites

  • 3 weeks later...
Em 14/01/2022 at 10:43, Furjala disse:

Olá,

Estou precisando criar uma expressão onde não permita 0 a esquerda e que limite de 1 a 4 ou 9 números.

Eu consegui criar ambas, porém separadas e não sei como seria para unificar as 2 regras.

^([0-9]{1}|[1-9]{2}||[1-9]{3}||[1-9]{4}|[1-9]{9})$ Aqui estou limitando os caracteres porém não consegui remover o 0.

^(0|[1-9][0-9]*)$ Aqui estou limitando o 0 a esquerda mas não consegui inserir limite de caracteres.

Alguém poderia me auxiliar?

 

Oi Furjala, beleza?

 

vamos supor o numero 001452, vc quer pegar apenas 1452 ou vc nao quer pegar nada?

Não sei se é o seu caso, mas uma forma de remover o 0 a esquerda, e fazer um cast pra inteiro.

 

Link to comment
Compartilhe em outros sites

  • 3 months later...
Em 14/01/2022 at 10:43, Furjala disse:

Olá,

Estou precisando criar uma expressão onde não permita 0 a esquerda e que limite de 1 a 4 ou 9 números.

Eu consegui criar ambas, porém separadas e não sei como seria para unificar as 2 regras.

^([0-9]{1}|[1-9]{2}||[1-9]{3}||[1-9]{4}|[1-9]{9})$ Aqui estou limitando os caracteres porém não consegui remover o 0.

^(0|[1-9][0-9]*)$ Aqui estou limitando o 0 a esquerda mas não consegui inserir limite de caracteres.

Alguém poderia me auxiliar?

Ola Furjala, tudo certo?
Se entendi corretamente, você precisa que retorne um match sempre que atender as condições citadas

se esse for o caso, você pode usar a seguinte expressão:

^[1-9]{1}(\d{3}|\d{8})$

Vamos entender por partes:

  • Não permitir zero a esquerda:
    • [1-9]{1} - criar uma classe de dígitos de 1 a 9 e usar o quantifier para pegar exatamente 1 caractere 
  • Limitar no máximo 4 ou 9 dígitos
    • \d{3} - usar \d é um atalho para [0-9] e usamos o quantifier {3} para selecionar exatamente 3 caracteres pois o 1º digito nós já resolvemos
    • \d{8} - apenas dígitos e selecionar exatamente 8 caracteres (trazer apenas os restantes)
    • | - Significa condicional para o OR
    • () - Agrupamento para nossa condição
    • ^ - Ancora para garantir que nada vem antes
    • $ - Ancora para garantir que nada vem depois

Espero ter ajudado

 

Link to comment
Compartilhe em outros sites

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...