Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] bug

no codigo abaixo sempre que passo o numero da numero invalido

import re

class TelefoneBr:

def __init__(self, telefone):
    if(self.valida_telefone(telefone)):
        self.numero = telefone
    else:
        raise ValueError("numero invalido")

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

celular = "5561999036098"

telefone_objeto = TelefoneBr(celular)

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
solução!

Olá, Felipe!

Parece que o problema está na forma como você está passando o número de telefone e na expressão regular que você está usando para validá-lo.

Seu padrão atual espera que o número de telefone esteja no formato "xx xx xxxx xxxx", mas o número de telefone que você está passando está no formato "xxxxxxxxxxxxx".

Uma possível solução seria remover os espaços em seu padrão de expressão regular. Além disso, como você está lidando com números de telefone brasileiros, acredito que o padrão correto seria "55" seguido de um número de 2 dígitos (DDD) e depois 9 dígitos (número do celular). Então, o padrão deveria ser algo como "55[0-9]{2}[0-9]{9}".

Aqui está uma versão modificada de sua classe:

import re

class TelefoneBr:

    def __init__(self, telefone):
        if(self.valida_telefone(telefone)):
            self.numero = telefone
        else:
            raise ValueError("numero invalido")

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

    def valida_telefone(self, telefone):
        padrao = "55[0-9]{2}[0-9]{9}"
        resposta = re.findall(padrao, telefone)
        if(resposta):
            return True
        else:
            return False

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

celular = "5561999036098"
telefone_objeto = TelefoneBr(celular)
print(telefone_objeto)

Bons estudos!