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!