Skip to content

Instantly share code, notes, and snippets.

@VictorHugoBatista
Last active June 17, 2017 19:59
Show Gist options
  • Save VictorHugoBatista/e58e2f184920fa5a3266 to your computer and use it in GitHub Desktop.
Save VictorHugoBatista/e58e2f184920fa5a3266 to your computer and use it in GitHub Desktop.
Demo de máscara com expressão regular de telefone brasileiro que aceita número de 8 e 9 dígitos com DDD nos formatos (11) 2222-3333 e (11) 92222-3333. Fonte: http://elcio.com.br/ajax/mascara/
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Demo Máscara Telefone</title>
</head>
<body>
Telefone: <input onkeypress="mascaraTelefone(this)"/><br />
<script>
/*
Modelo de chamada: <input onkeypress="mascaraTelefone(this) /> this = objeto DOM do input
Adição de função de leitura do campo, em outra linha de execução - setTimerout()
Parâmetro: input - objeto do DOM. Alternativa: object.getElementById("id")
*/
function mascaraTelefone(input){
input.maxLength = 15;//propriedade maxlength adicionada ao campo por javascript
setTimeout(//set timeout usado para atualização mais precisa
function(){
input.value = formataTelefone(input.value);//atualização do campo com seu valor formatado em formataTelefone()
}
,1//atualização do campo a cada milisegundo
);
}
/*
Tratamento da string por expressão regular.
Parâmetro: value - string a ser tratada
Retorno: value - string tratada no formato da máscara
*/
function formataTelefone(value){
value = value.replace(/\D/g,"");//Remove tudo o que não é dígito
value = value.replace(/^(\d\d)(\d)/g,"($1) $2");//Coloca parênteses em volta dos dois primeiros dígitos
if(value.length < 14) value = value.replace(/(\d{4})(\d)/,"$1-$2");//Número com 8 dígitos. Formato: (99) 9999-9999
else value = value.replace(/(\d{5})(\d)/,"$1-$2");//Número com 9 dígitos. Formato: (99) 99999-9999
return value;
}
//Fonte: http://elcio.com.br/ajax/mascara/
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment