goncin@wordpress.com:~$ _

Linux, programação e toda sorte de nerdices

Validando números de telefone com expressões regulares

A privatização do setor de telecomunicações, em meados da década de 90, universalizou o acesso dos brasileiros aos serviços de telefonia. De quebra, organizou a estrutura numérica dos terminais telefônicos: antes tínhamos códigos de área (códigos DDD) de três e quatro dígitos, e os números de telefone variavam entre de 5 a 7 dígitos. Atualmente, no país, todos os códigos de área têm dois dígitos e os números de telefone, oito. Essa estrutura uniforme torna possível validar números de telefone utilizando expressões regulares. Vejamos como.

Validando códigos de área (DDD)

Os código de área possíveis no Brasil vão de 10 a 99. Portanto, a expressão regular para validar códigos de área é

[1-9][0-9] (10)|([1-9][1-9])

UPDATE:  O Alexandre Taz, em seu comentário, alertou que o único DDD válido terminado em 0 é o 10, que será implementado em breve na Grande São Paulo, e observou também que prefixos iniciados com o número 6 também foram reservados para celulares. As expressões regulares foram alteradas para refletir essas alterações. Obrigado, Alexandre!

Trocando em miúdos: na primeira posição, aceitamos dígitos de 1 a 9 e, na segunda, dígitos de 0 a 9. Simples assim.

Se quisermos validar o código de área entre parênteses, como usualmente o código de área é representado, basta acrescentar:

\((10)|([1-9][1-9])\)

Uma vez que os sinais de abre e fecha parênteses porque esses sinais têm significado especial nas expressões regulares, é necessário antecedê-los com uma contrabarra para que sejam considerados literalmente.

Validando números de telefone (incluindo celulares)

Como dito anteriormente, os números de telefone (os de celular, inclusive) têm oito dígitos. O primeiro dígito do prefixo (os quatro primeiros números) pode variar de 2 a 9; números iniciados com 1 são reservados para telefônes de emergência, geralmente com 3 dígitos apenas (190 – polícia; 193 – bombeiros, etc.), e não serão validados. Os outro sete dígitos variam entre 0 e 9. Além disso, entre o quarto e o quinto dígito, vemos normalmente um hífen. De posse dessas informações, montamos seguinte expressão regular:

[2-9][0-9]{3}-[0-9]{4}

Explicando: o primeiro dígito (representado pelo primeiro grupo) pode variar de 2 a 9. A seguir, temos um grupo que pode variar entre 0 e 9 e se repete {3} vezes, seguido pelo hífen. O grupo final também pode variar entre 0 e 9 e se repete {4} vezes.

Validando números de celular

Pelas atuais normas da Anatel, os dígito inicial dos prefixos reservados para números de celular varia entre 7 6 e 9. Logo:

[6-9][0-9]{3}-[0-9]{4}

Foi necessário modificar apenas o primeiro grupo, relativamente à máscara anterior.

Colocando tudo junto

Para os casos em que o código de área será armazenado no mesmo campo que o número do telefone, a expressão regular é:

\((10)|([1-9][1-9])\) [2-9][0-9]{3}-[0-9]{4}

Trata-se simplesmente das máscaras já vistas, colocadas uma após a outra, e com um espaço entre elas para garantir a legibilidade.

Conclusão

Expressões regulares são ótimas para validar dados que obedecem a um padrão. Pesquise, busque, aprenda e melhore suas aplicações com elas. Praticamente todas as linguagens de programação oferecem suporte a elas. Consulte a documentação da sua linguagem para aprender como elas podem ser aplicadas :) .

About these ads

27 Respostas para “Validando números de telefone com expressões regulares

  1. Pingback: Tweets that mention Validando números de telefone com expressões regulares « goncin@wordpress.com:~$ _ -- Topsy.com

  2. William G. Comnisky 30/08/2010 às 20\0842

    Saudações! e pra validar nextel, como faz? ;D abraço

  3. Alexandre 03/09/2010 às 11\1114

    Duas observações a o unico ddd que tem o segundo digito zero é o 10 que vai começar a ser usado ano que vem, segundo a ANATEL, e celulares começam a partir de 6

    • goncin 03/09/2010 às 11\1130

      Obrigado, Alexandre! Não sabia que o prefixo 6 também havia sido reservado para celulares. E a regra do DDD foi aperfeiçoada a partir de sua observação, com um update no post. Obrigado pela visita e pelo comentário. :D

  4. Pingback: Aprendendo a pensar com expressões regulares « goncin@wordpress.com:~$ _

  5. Márcio 27/04/2011 às 20\0807

    Em primeiro lugar, parabéns pelo tópico, goncin!

    Vocês sabem me dizer quais são os prefixos válidos para telefones fixos?

    Como os de celulares são de 6 a 9, os de fixos seriam de 1 a 5? Alguém saberia me informar?

    Valeu!

    • goncin 27/04/2011 às 22\1021

      Márcio,

      Na ocasião em que eu escrevi este post (agosto/2010), eu tinha notícia de que os prefixos de 2 a 6 eram reservados à telefonia fixa, e de 7 a 9, aos celulares. Logo a seguir, o Alexandre Taz, num comentário aí em cima, alertou que os prefixos iniciados em 6 já haviam migrado daquela para estes.

      A grande questão é que o ritmo de crescimento das linhas celulares é bem mais forte do que das linhas fixas. Nesse passo, em São Paulo já começaram a utilizar os prefixos 5XXX para celulares, como você pode conferir nesta matéria. E, como se isso não bastasse, há ainda a criação do DDD 10 na região metropolitana da capital paulista.

      O jeito é acompanhar os novos capítulos dessa “novela”, que, pelo visto, está ainda longe de seu final. ;)

  6. Murilo 29/06/2011 às 21\0933

    Belo post, bem explicado.

    Gostaria de que meu campo de telefone digite as aspas, espaço e o hifen porque se eu deixar o campo validado como voce explicou, vai ficar dificil de receber contatos pelo site.

    Sabe como eu faço isso?

    Obrigado.

  7. Murilo 29/06/2011 às 21\0934

    perdao, corrija pra mim, eu quis dizer parenteses e não aspas. valeu

  8. Flávio 23/11/2011 às 16\0426

    O Espaço após o parênteses é Opcional, pois muitas pessoas digitam sem o espaço.

    Ficaria \((10)|([1-9][1-9])\) ?[2-9][0-9]{3}-[0-9]{4}

  9. Diego Ferreira 15/08/2012 às 01\0109

    Valida com ou sem parênteses, traços e espaços.
    ^\(?\d{2}\)?[\s-]?\d{4}-?\d{4}$

  10. Murilo 15/08/2012 às 15\0326

    Agora teremos o 9 no DDD (11), até mudar em todo o pais vai ficar uma salada boa. Sinceramente não sei o que fazer no meu site, visto que muita gente não quer se identificar ao entrar em contato no site.

  11. Jovi Marcos 23/05/2013 às 13\0158

    Vale a pena atualizar o artigo e incluir a tratativa do nono dígito…

  12. José Ivan Marciano Junior 07/06/2013 às 12\1238

    Pra adequar a validação a nova nomenclatura para os números de São Paulo, não poderíamos modificar a expressão da seguinte forma?

    [\(([1-9][1-9])\) [2-9][0-9]{3}|\(11\) 9[2-9][0-9]{3}]-[0-9]{4}

  13. Guilherme Machado 03/07/2013 às 11\1112

    Como ficaria essa expressão em javascript?
    \((10)|([1-9][1-9])\) [2-9][0-9]{3}-[0-9]{4}

    Alguma recomendação de editor de expressões regulares em javascript online?

  14. Rafael Topô 10/08/2013 às 11\1113

    Esta é a expressão que utilizei na rotina aqui da empresa

    Para validar os telefones : \(\(?10\)?|\(?[1-9][1-9]\)?\)?[6-9]?[2-9][0-9]{3}-?[0-9]{4}

    Como não prever os números repetitivos, como telefones somente com o número 1, ou 2, etc., é necessário indicar um padrão inválido e após ser aprovado no primeiro teste efetuar o segundo, porém se for aprovado no segundo, isso significa que é inválido, por ter todos os números do telefone composto pelo mesmo numeral, eu uso esta expressão:

    (\(?[0]?[0]?\)?)?[0]?[0]{4}-?[1]{4} | (\(?[1]?[1]?\)?)?[1]?[1]{4}-?[1]{4} |… e assim até o dígito 9.

  15. Marcio Luis Siqueira 20/03/2014 às 11\1156

    Os números de Celular passaram a ter um digito a mais em SP!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

%d blogueiros gostam disto: