1
resposta

Formatação numero de telefone!

Olá! Segui o código igual ao da aula, porém pela falta de bons exemplos e de mais casos explicados no curso, não consegui tirar a dúvida sobre as diferentes formatações peloi video somente... Temos o padrão de formatação ([0-9]{2,3})?([0-9]{2})([0-9]{4,5})([0-9]{4}), deixando o digito do pais como opcional, até ai ok, mas quando faço o seguinte pedido de numero: 5521987080711, em vez de retornar +55(21)987080711 retorna +552(19)8708-0742!! Eu fiz algo de errado ou o código não conserta esse erro? Achei a aula incrivelmente rasa, dando exemplos de formatação mas sem prever erro ou dificuldade alguma nos exemplos....

Segue meu codigo:

Main:

from telefonesbr import TelefonesBr import re

telefone = '5521987080742'

telefone_objeto = TelefonesBr(telefone)

print(telefone_objeto)

Classe:

import re

class TelefonesBr: def init(self, telefone): if self.valida_telefone(telefone): self.numero = telefone else: raise ValueError ('Numero incorreto')

def __str__(self):
    return self.format_numero()


def valida_telefone(self, telefone):
    padrao = '([0-9]{2,3})?([0-9]{2})([0-9]{4,5})([0-9]{4})'
    resposta = re.findall(padrao, telefone)
    if resposta:
        return True
    else:
        return False

def format_numero(self):
    padrao = '([0-9]{2,3})?([0-9]{2})([0-9]{4,5})([0-9]{4})'
    resposta = re.search(padrao, self.numero)
    numero_formatado = '+{}({}){}-{}'.format(resposta.group(1), resposta.group(2), resposta.group(3), resposta.group(4))
    return numero_formatado
1 resposta

Boa tarde! Pois é. Tive o mesmo problema aqui. E me parece um falha na lógica do padrão mesmo.

Como o grupo do código internacional está setado para aceitar 2 ou 3 dígitos, no caso de um número de celular 5521987080711, o primeiro grupo fica com 3 dígitos e a regra dos demais grupos continuam válidas, veja:

Grupo1 (2 ou 3 dígitos): 552 Grupo2 (2 dígitos): 19 Grupo3 (4 ou 5 dígitos): 8708 Grupo4 (4 dígitos): 0711

Fiquei esperando ele testar mais números no final do vídeo também mas foi uma expectativa frustrada.