Skip to content

Instantly share code, notes, and snippets.

@reggiegutter
Created May 4, 2013 05:53
Show Gist options
  • Save reggiegutter/5516382 to your computer and use it in GitHub Desktop.
Save reggiegutter/5516382 to your computer and use it in GitHub Desktop.
Regular expression (Regex) para validar números de telefones celulares para o Brasil, incluindo os novos números de celulares para São Paulo - que agora possuem o número 9 no início da primeira seção após o DDD (Exemplo: (11) 92222-2222).
<?php
// Função para checar número de telefone
function phone_check($phone)
{
$exp_regular = '/^(\(11\) (9\d{4})-\d{4})|((\(1[2-9]{1}\)|\([2-9]{1}\d{1}\)) [5-9]\d{3}-\d{4})$/';
$ret = preg_match($exp_regular, $phone);
if($ret === 1)
{
echo 'Número de telefone válido';
return TRUE;
}
else
{
echo 'Número de telefone inválido';
return FALSE;
}
}
// Essa expressão é feita mais para telefones celulares.
// Você pode adicionar suporte para todos os números de telefone, ou criar outro regex com base nesse.
// Se alguém encontrar uma forma de melhorá-lo ou se alguma coisa estiver errada, favor informa!
// testes
preg_match($exp_regular, '(11) 92222-2222'); // OK
preg_match($exp_regular, '(12) 8222-2222'); // OK
preg_match($exp_regular, '(11) 82222-2222'); // NOT OK
preg_match($exp_regular, '(12) 92222-2222'); // NOT OK
preg_match($exp_regular, '(11) 3222-2222'); // NOT OK
// Espero ter ajudado!
// Abraço a todos!
?>
@vixdouglas
Copy link

E para validar a implementação da Anatel em 2013 que incluem os DDDs de 11 ao 28? Link: http://goo.gl/pgCncI

Passei mais de uma hora lendo sobre Regex mais não consegui nada.

Eu imaginei assim:
/^(((11-28)) (9\d{4})-\d{4})|(((1[2-9]{1})|([2-9]{1}\d{1})) [5-9]\d{3}-\d{4})$/

Poderia liberar uma nova atualização?

Grato!

@luismr
Copy link

luismr commented Jun 6, 2014

@jandrei-marques
Copy link

Fiz uma modificacao para pegar do ddd 11 ao 28, e para testar sem espaço apos o ddd,
/^(([1-2][0-8])(9\d{4})-\d{4})|(((1[2-9]{1})|([2-9]{1}\d{1}))[5-9]\d{3}-\d{4})$/

@depklyon
Copy link

Segue mais um regex aqui para validar SOMENTE números de celular

Esse valida também o 9º dígito nos DDDs de SP, RJ e ES.

/^(?:[12][1-9]9[2-9]|[3-9][1-9][5-9])[0-9]{7}$/

Os requisitos são:

  1. passar somente números sem espaços ou qualquer outro caractere não-numérico.
    Dica: preg_replace('/[^0-9]/', '', $telefone);

  2. sempre passar com o DDD.
    Dica: preg_replace('/^([0-9]{8})$/', '41$1', $numero);

@FelipeTrebino
Copy link

Fiz um validando todos os DDD do brasil, nesse formato = 99999999999

^((1[1|2|3|4|5|6|7|8|9])|(2[1|2|4])|(3[1|2|3|4|5|7|8])|(4[1|2|3|4|5|6])|(5[1|3|4|5])|(6[1|2|3|4|5|6|7])|(7[1|3|4|5|7|9])|(8[1|2|3|5|6|7|8|9])|(9[1|2|3|4|5|6|7|8|9]))(9)[1-9]{8}$

@Tocchettog1
Copy link

Boa tarde, criei esses dois Regex para telefone celular:

^\d{2}\9\d{4}\d{4}$
Este aceita somente os numeros (incluso DDD e 9 inicial).
EX: 51982316433

^(?\d{2})?\9\d{4}-?\d{4}$
Este aceita o telefone com ( ) e - .
EX: (51)98231-6433

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment