1
resposta

[Dúvida] Aula Regex -- mascara para o número de telefone

Olá, fiz o código sem problemas, porém me surgiu uma dúvida, no código do pais o primeiro grupo da mascara, pode conter de dois a três dígitos, se eu coloco um numero brasileiro e dou como código do país 055, a mascara funciona normalmente, pórem se eu coloco apenas o 55 a formatação não sai como planejada e "puxa" um dígito do telefone para o código do país. Teria alguma forma de otimizar isso??

 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

Sim, é possível otimizar o código para tratar casos em que o código do país é informado com apenas dois dígitos, sem que haja conflito com os dígitos do número de telefone.

Uma abordagem é verificar o comprimento do código do país fornecido e adicionar o zero à esquerda, caso ele tenha apenas dois dígitos. Isso pode ser feito usando uma condicional para verificar se a quantidade de dígitos do código do país é igual a dois:

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)

    codigo_pais = resposta.group(1)
    if len(codigo_pais) == 2:
        codigo_pais = '0' + codigo_pais

    numero_formatado = '+{}({}){}-{}'.format(codigo_pais, resposta.group(2),
                                             resposta.group(3),
                                             resposta.group(4))
    return numero_formatado

Dessa forma, se o código do país tiver apenas dois dígitos, a condicional adicionará um zero à esquerda, para que o número do telefone não seja afetado pela formatação incorreta. Caso o código do país tenha três dígitos ou mais, a formatação seguirá como planejado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software