1
resposta

Regex para telefone celular

Na aula em que é criada a classe para telefones a regex serve para telefones fixos apenas -- é possível utilizar também para telefones celulares ?

Por exemplo para o número +551151482377 a formatação funciona perfeitamente ficando +55 (11) 5148-2377, porém quando eu passo um celular como +551195148-2377 a formatação acaba quebrando ficando assim: +551 (19) 5148-2377

1 resposta

Oii Jorge, como você está?

Peço desculpas pela demora em obter um retorno.

Hoje em dia todos os telefones celulares do Brasil tem 9 dígitos. E os telefones fixos possuem 8 dígitos.

Então pensando no cenário brasileiro temos casos como:

  • 55 31 98767 3845 (celulares)
  • 55 31 3867 2312 (fixos)

Mas como citado pelo professor, alguns países não possuem 2 dígitos no código de área, mas sim 3. E neste casos, irá variar muito se eles possuem ou não o nono dígito nos celulares. Então temos casos de:

  • 155 23 8756 3223 (celulares)
  • 155 45 98765 1234 (celulares)
  • 155 45 8764 1343 (fixos)

Tudo tranquilo até aqui ?

Pois bem, na regex padrão que o professor disponibiliza, podemos fazer uma mudança sutil para que possamos encontrar todos estes padrões acima citados sem ocorrer o problema que você mencionou.

Podemos pedir o usuário para digitar o número com parênteses no ddd, pois, assim iremos conseguir saber se o código de área começa com 2 ou 3 dígitos. Deixo abaixo um exemplo:

import re

telefone = "55(11)951482377"
padrao = "([0-9]{2,3})?(\([0-9]{2}\))([0-9]{4,5})([0-9]{4})"
resposta = re.search(padrao, telefone)
numero_formatado = "+{}{}{}-{}".format(
            resposta.group(1),resposta.group(2),resposta.group(3),
            resposta.group(4)
)
print(numero_formatado)

A mudança foi apenas escapar o parênteses: (\([0-9]{2}\)), pegando assim o seu valor real e não como um grupo de captura.

Resultado:

+55(11)95148-2377

Vale ressaltar que nossa regex ainda tem muito a ser melhorada ainda para que alcancemos uma validação completa, pois, imagine os seguintes casos:

  • Números de 0800
  • E se o usuário colocar algum ddd ou número de telefone que comece com 0?

Mas o objetivo da aula foi nos dar um aperitivo do poder que as expressões regulares possuem. Portanto, deixo aqui alguns artigos que podem te ajudar a melhorar ainda mais esta regex e praticar:

E por fim, um curso aqui da Alura sobre o assunto.

Lembrando que sempre que vamos construir uma regex temos que pensar em nosso padrão, no alvo que queremos atingir e todo resto diferente daquilo será descartado e é super importante que os dados possuam um certo padrão.

Qualquer dúvida estou à disposição. Espero ter ajudado. Bons estudos!!!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!