Vamos construir uma expressão regular para validar celulares brasileiros, com exemplos de como utilizar em JavaScript, Python e PHP.
Eu vou explicar como cheguei na versão final dando assim uma abrangência maior de como desenvolvi a expressão regular e cheguei no resultado final.
/^((1|4|5|8|9)[0-9])|(2(1|2|4|7|8))|(3([1-5]|[7-8]))(5(1|[3-5]))(7(1|9|[3-7]))/
Contemplava somente o DDD brasileiro, foi feita por partes e sendo testada a cada pedaço desenvolvido.
Todo DDD que começa com 1, 4, 6, 8 ou 9 o segundo dígito pode ser de 0 a 9.
Todo DDD que começa com 2 o segundo dígito somente pode ser 1, 2, 4, 7 e 8.
Todo DDD que começa com 3 o segundo dígito somente pode ser de 1 à 5 ou 7 e 8.
Todo DDD que começa com 5 o segundo dígito pode ser 1 ou de 3 à 5.
Todo DDD que começa com 7 o segundo dígito pode ser 1, 9 ou de 3 a 7 [1, 3, 4, 5, 6, 7, 9]
Essas informações foram extraídas dessa fonte:
https://pt.wikipedia.org/wiki/Discagem_direta_%C3%A0_dist%C3%A2ncia
Foi refinada a expressão regular utilizando sintaxes que otimizam o tamanho da expressão.
/^([14689][0-9]|2[12478]|3([1-5]|[7-8])|5([13-5])|7[193-7])/
/^([14689][0-9]|2[12478]|3([1-5]|[7-8])|5([13-5])|7[193-7])9[0-9]{8}$/
Essa versão contempla toda a explicação citada acima sobre os DDD e a expressão pro celular.
Até onde entendo após o nono dígito todos começam com 9. Por favor me corrijam se eu estiver errado.
Até onde entendo após o nono dígito todos começam com 9. Por favor me corrijam se eu estiver errado.
Após o 9 existem 8 números "aleatórios", se eu estiver errado também me corrijam.
Vamos aos Exemplos:
Exemplo: Verificando se o número de celular escrito é válido.
function verificaCelular(string $celular) : bool
{
$celular = preg_replace('/[^0-9]/', '', $celular);
return preg_match('/^([14689][0-9]|2[12478]|3([1-5]|[7-8])|5([13-5])|7[193-7])9[0-9]{8}$/', $celular);
}
if(!verificaCelular('(11)99999-9999'))
{
echo 'O número informado não é um celular válido!';
}
Exemplo: Verificando se o número de celular escrito é válido.
function verificaCelular(celular)
{
celular = celular.replace('/[^0-9]/', '');
return celular.match(/^([14689][0-9]|2[12478]|3([1-5]|[7-8])|5([13-5])|7[193-7])9[0-9]{8}$/);
}
if(!verificaCelular('(11)99999-9999')
{
console.log('O número informado não é um celular válido!';
}
Exemplo: Verificando se o número de celular escrito é válido.
import re
def verificaCelular(celular):
celular = re.sub('[^0-9]', '', celular)
return bool(re.match('^([14689][0-9]|2[12478]|3([1-5]|[7-8])|5([13-5])|7[193-7])9[0-9]{8}$', celular))
if not verificaCelular('(11)99999-9999'):
print('O número informado não é um celular válido!')
Espero que tenham gostado desse artigo, originalmente foi postado no meu Linkedin https://www.linkedin.com/pulse/validando-celular-brasileiro-regex-anderson-arruda/ mas hoje eu tentei ser um pouco mais claro e objetivo aqui através do meu blog.
Qualquer dúvidas ou sugestões deixem nos comentários! Desde já agradeço e até mais!
Seja o primeiro a comentar o nosso artigo!