Skip to content

Instantly share code, notes, and snippets.

@boliveirasilva
Created October 14, 2015 16:11
Show Gist options
  • Star 45 You must be signed in to star a gist
  • Fork 16 You must be signed in to fork a gist
  • Save boliveirasilva/c927811ff4a7d43a0e0c to your computer and use it in GitHub Desktop.
Save boliveirasilva/c927811ff4a7d43a0e0c to your computer and use it in GitHub Desktop.
Regex para validação de telefones (celular ou fixo) no Brasil. A expressão leva em conta o formato internacional/nacional, com ou sem o DDD, de telefones fixos e celulares.
<?php
// A função abaixo demonstra o uso de uma expressão regular que identifica, de forma simples, telefones válidos no Brasil.
// Nenhum DDD iniciado por 0 é aceito, e nenhum número de telefone pode iniciar com 0 ou 1.
// Exemplos válidos: +55 (11) 98888-8888 / 9999-9999 / 21 98888-8888 / 5511988888888
function phoneValidate($phone)
{
$regex = '/^(?:(?:\+|00)?(55)\s?)?(?:\(?([1-9][0-9])\)?\s?)?(?:((?:9\d|[2-9])\d{3})\-?(\d{4}))$/';
if (preg_match($regex, $phone) == false) {
// O número não foi validado.
return false;
} else {
// Telefone válido.
return true;
}
}
// Se o parâmetro 'matches' for utilizado, o retorno será um array com 4 campos:
// - DDI
// - DDD
// - Primeira parte do número;
// - Segunda parte do número;
@boliveirasilva
Copy link
Author

boliveirasilva commented Oct 4, 2021

Alguém sabe como deixar o DDD obrigatório?

@giovannicandido basta tirar o quantificador opcional (?) do grupo de DDD...
O resultado será: /^(?:(?:\+|00)?(55)\s?)?(?:\(?([1-9][0-9])\)?\s?)(?:((?:9\d|[2-9])\d{3})\-?(\d{4}))$/

Montei um exemplo aqui: Regex101

@giovannicandido
Copy link

^(?:(?:+|00)?(55)\s?)?(?:(?([1-9][0-9]))?\s?)(?:((?:9\d|[2-9])\d{3})-?(\d{4}))$

Obrigado @boliveirasilva tinha tentado sem sucesso mas com seu exemplo funcionou

@J3eff
Copy link

J3eff commented Dec 7, 2022

Obrigado @boliveirasilva, fez a boa <3

@LoyaltyAG
Copy link

Alguém sabe como deixar o DDD obrigatório?

@giovannicandido basta tirar o quantificador opcional (?) do grupo de DDD... O resultado será: /^(?:(?:\+|00)?(55)\s?)?(?:\(?([1-9][0-9])\)?\s?)(?:((?:9\d|[2-9])\d{3})\-?(\d{4}))$/

Montei um exemplo aqui: Regex101

No meu caso eu precisei permitir um espaço após o dígito 9 ( (xx) 9 xxxx-xxxx ). Usei seu exemplo adicionando apenas o espaço opcional e funcionou perfeitamente. Obrigado!

/^(?:(?:\+|00)?(55)\s?)?(?:\(?([1-9][0-9])\)?\s?)(?:((?:9\s?\d|[2-9])\d{3})\-?(\d{4}))$/```

@klimapsyteck
Copy link

Valeu mano funcionou aqui.

@LucasSaud
Copy link

Obrigado ! Ajudou imenso

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