1
resposta

Regex para numeros telefonicos

Eu criei esse padrão que consegue encontrar diversas formatos de telefone, porém pode acabar validando algumas sequências numéricas incorretamente.

padrao = re.compile(r"(?:\+?\d{2,3}[ ]{0,4})?(?:(?:\(0?\d{2}\)|0?\d{2})[ ]{0,4})?(?:9[ .-]?)?\d{4}[ .-]?\d{4}")

fones = [
    "(092)9 4313-3030 ",
    "21 38323344",
    "+5535992321234",
    "155 8799232-3344",
    "013 9.7832-5588",
    "(45) 9 7832-9932",
    "055 032 99232 7711",
]

Explicação:

  1. (?:): Não-captura de grupo, permite que o findall() seja usado sem retornar apenas os grupos.
  2. \+?: Prefixo de codigo internacional, escapado com a barra invertida, e considerado elemento opcional pelo ?.
  3. \d{2,3}: Seleciona apenas 2 ou 3 digitos, equivalente à [0-9].
  4. [ ]{0,4}: Separa DDI, e DDD com até 4 espaços. O número maioir pode ser apenas 2, caso o usuário tenha digitado dois espaços sem querer, ao invés de um.
  5. \(0?\d{2}\)|0?\d{2}: Encontra DDD nos formatos (12), (012) OU 12, 012, mas não 12).
  6. 9?[ .-]: Digito 9 pode ser seguido por um espaço, ponto ou hífen, eu não existir.

Se encontrar algum erro ou sabe de uma regra especial depois do 9 opcional, me avisem. :)

1 resposta

Ei Felipe, beleza?

Então, acho que você pode criar um padrão para cada tipo de numero existente pois é meio difícil, tendo em vista a variedade, encontrar um padrão que sirva para todos.

fiz um exemplo pegando essa ideia:

import re

fones = [
    "(092)9 4313-3030 ",
    "21 38323344",
    "+5535992321234",
    "155 8799232-3344",
    "013 9.7832-5588",
    "(45) 9 7832-9932",
    "055 032 99232 7711",
]

padrao_fones = {
    'padrao01':'[(][0-9]{3}[)][0-9]{1}[ ][0-9]{4}[-][0-9]{4}',
    'padrao02':'[0-9]{2}[ ][0-9]{8}',
    'padrao03':'[+][0-9]{13}'
}


for i,numero in zip(range(len(fones)),fones):
  for padrao in padrao_fones:
    verificar = bool(re.match(padrao_fones[padrao], fones[i]))
    if verificar:
      print(f'telefone identificado: {numero}')

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

A medida que for encontrando padrões diferentes, vai acrescentando a biblioteca 'padrao_fones'. Creio que com uns 10 padrões, resolva seu caso.

Bom trabalho!! Continue estudando!! Valeu!!