Usuário com melhor resposta
máscara celular de 8 ou 9 dígitos

Pergunta
-
Uso VS2010, aspnet4, c#, jquery
Não é novidade que em São Paulo os celulares ganharam um dígito a mais, muita gente acha que este dígito é adicionado ao final do telefone, mas será no início, então como criar uma máscara que sirva para esta mudança e também para os celulares de 8 dígitos dos outros estados
por exemplo para adicionar no final ficaria assim
$(document).ready(function () {
$("#TxtTelefone").mask("(11)8888-8888?9");Mas o dígito vai ser adicionado no início (11)98888-8888 e sirva tmb para os outros celulares (xx)8888-8888
Respostas
-
Tive esse problema no ERP da empresa em que trabalho e a solução foi o seguinte:
1 - Baixe o plugin https://github.com/igorescobar/jQuery-Mask-Plugin
2 - código de exemplo:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> <script type="text/javascript" src="jquery.mask.min.js"></script> <script> $(document).ready(function(e) { var obj = $('.msk-celular'); $(obj).mask(($(obj).val().length > 13) ? '(00)00000-0000' : '(00)0000-0000', {onKeyPress: function(phone, e, currentField, options){ var new_sp_phone = phone.match(/^(\(11\)9(5[0-9]|6[0-9]|7[01234569]|8[0-9]|9[0-9])[0-9]{1})/g); new_sp_phone ? $(currentField).mask('(00)00000-0000', options) : $(currentField).mask('(00)0000-0000', options)}}); }); </script> </head> <body> <input name="phone" type="text" class="msk-celular" /> </body> </html>
Esse código foi uma adaptação do código desenvolvido pelo Igor, mesma pessoa que desenvolveu o plugin de mascara.
Espero ter ajudado e boa sorte!
Não esqueça de marcar como útil uma resposta que te ajude.
"A diversão é a alma do negócio"- Sugerido como Resposta Lucas Vandor sexta-feira, 28 de setembro de 2012 17:31
- Marcado como Resposta Álvaro Luiz sexta-feira, 5 de outubro de 2012 12:24
-
Cara, eu tenho salvo um código que sempre utilizo em meus projetos para validação de telefone. O código formata no padrão (11) 9999-9999
Pra implementação do 9º dígito eu simplesmente aumentei em 1 o tamanho máximo do meu TextBox. O número de telefone fica então: (11) 9999-99999
Vou deixar aqui o código, espero que lhe seja útil.
Javascript
/*Função que padroniza telefone (11) 9999-9999*/ function Telefone(v){ v=v.replace(/\D/g,"") v=v.replace(/^(\d\d)(\d)/g,"($1) $2") v=v.replace(/(\d{4})(\d)/,"$1-$2") return v }
pagina.aspx
<asp:TextBox runat="server" ID="txtTelefone" MaxLength="15" onKeyDown="Mascara(this,Telefone);"
onKeyPress="Mascara(this,Telefone);" onKeyUp="Mascara(this,Telefone);" />
Juan Nogueira
Visite o meu site:
www.juannogueira.com.br
Se foi útil, marque como resposta e faça a alegria de um programador :)- Editado Juan Nogueira sexta-feira, 28 de setembro de 2012 03:56 melhorar a visualização do código
- Marcado como Resposta Álvaro Luiz sexta-feira, 5 de outubro de 2012 12:24
Todas as Respostas
-
Vc tem algum combo que indica o estado da pessoa?
Pq aí vc, ao dar blur no combo, trocar a mascara dependendo se for sp ou não
(sorry, não conheço um jeito melhor)
Sou só uma little padawan que tem sorte de andar com jedis, mas farei o possível por quem precisar :)
Se precisar: @MayogaX -
-
Tive esse problema no ERP da empresa em que trabalho e a solução foi o seguinte:
1 - Baixe o plugin https://github.com/igorescobar/jQuery-Mask-Plugin
2 - código de exemplo:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> <script type="text/javascript" src="jquery.mask.min.js"></script> <script> $(document).ready(function(e) { var obj = $('.msk-celular'); $(obj).mask(($(obj).val().length > 13) ? '(00)00000-0000' : '(00)0000-0000', {onKeyPress: function(phone, e, currentField, options){ var new_sp_phone = phone.match(/^(\(11\)9(5[0-9]|6[0-9]|7[01234569]|8[0-9]|9[0-9])[0-9]{1})/g); new_sp_phone ? $(currentField).mask('(00)00000-0000', options) : $(currentField).mask('(00)0000-0000', options)}}); }); </script> </head> <body> <input name="phone" type="text" class="msk-celular" /> </body> </html>
Esse código foi uma adaptação do código desenvolvido pelo Igor, mesma pessoa que desenvolveu o plugin de mascara.
Espero ter ajudado e boa sorte!
Não esqueça de marcar como útil uma resposta que te ajude.
"A diversão é a alma do negócio"- Sugerido como Resposta Lucas Vandor sexta-feira, 28 de setembro de 2012 17:31
- Marcado como Resposta Álvaro Luiz sexta-feira, 5 de outubro de 2012 12:24
-
Cara, eu tenho salvo um código que sempre utilizo em meus projetos para validação de telefone. O código formata no padrão (11) 9999-9999
Pra implementação do 9º dígito eu simplesmente aumentei em 1 o tamanho máximo do meu TextBox. O número de telefone fica então: (11) 9999-99999
Vou deixar aqui o código, espero que lhe seja útil.
Javascript
/*Função que padroniza telefone (11) 9999-9999*/ function Telefone(v){ v=v.replace(/\D/g,"") v=v.replace(/^(\d\d)(\d)/g,"($1) $2") v=v.replace(/(\d{4})(\d)/,"$1-$2") return v }
pagina.aspx
<asp:TextBox runat="server" ID="txtTelefone" MaxLength="15" onKeyDown="Mascara(this,Telefone);"
onKeyPress="Mascara(this,Telefone);" onKeyUp="Mascara(this,Telefone);" />
Juan Nogueira
Visite o meu site:
www.juannogueira.com.br
Se foi útil, marque como resposta e faça a alegria de um programador :)- Editado Juan Nogueira sexta-feira, 28 de setembro de 2012 03:56 melhorar a visualização do código
- Marcado como Resposta Álvaro Luiz sexta-feira, 5 de outubro de 2012 12:24
-
-
Eu fiz assim para o TextBox ficar genérico, independente do estado(vai que os outros estados add mais numeros):
public static string SetaMascaraTelefone(ref string telefone, string Mask, bool textointeiroselecionado, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back)
{
if (textointeiroselecionado)
{
telefone = "";
Mask = "(99) 0000-0000";
}
else if (telefone.Replace(" ", "").Length == 3)
{
Mask = "(99) 0000-0000";
}
}
else if (e.KeyCode < Keys.D9)
return Mask;
else if (telefone.Length == 14)
{
Mask = "(99) 00000-0000";
int valor = (int)e.KeyCode;
string[] tipo_mudanca = telefone.Split('-');
switch (valor)
{
case 96:
if (tipo_mudanca[1].Length != 3)
telefone = telefone + (Keys.D0);
break;
case 97:
if (tipo_mudanca[1].Length != 3)
telefone = telefone + (Keys.D1);
break;
case 98:
if (tipo_mudanca[1].Length != 3)
telefone = telefone + (Keys.D2);
break;
case 99:
if (tipo_mudanca[1].Length != 3)
telefone = telefone + (Keys.D3);
break;
case 100:
if (tipo_mudanca[1].Length != 3)
telefone = telefone + (Keys.D4);
break;
case 101:
if (tipo_mudanca[1].Length != 3)
telefone = telefone + (Keys.D5);
break;
case 102:
if (tipo_mudanca[1].Length != 3)
telefone = telefone + (Keys.D6);
break;
case 103:
if (tipo_mudanca[1].Length != 3)
telefone = telefone + (Keys.D7);
break;
case 104:
if (tipo_mudanca[1].Length != 3)
telefone = telefone + (Keys.D8);
break;
case 105:
if (tipo_mudanca[1].Length != 3)
telefone = telefone + (Keys.D9);
break;
}
}
return Mask;
}E no evento de keydown eu passo:
txtTelefone.Mask = ClsFuncoes.SetaMascaraTelefone(ref telefone, txtTelefone.Mask, (txtTelefone.SelectionLength == 15?true:false), e);
txtTelefone.Text = telefone;
- Editado BrunoBecattini terça-feira, 20 de agosto de 2013 21:30
- Sugerido como Resposta Julio Falcão segunda-feira, 2 de setembro de 2013 18:09
- Não Sugerido como Resposta Julio Falcão segunda-feira, 2 de setembro de 2013 18:09
-
A seguir. Somente números + DDD + tel 8 "OU" 9 dígitos + tratamento para "ç e Ç"
By: †‡Falcão‡†
js: Assinatura(NomeCampo)
function telefone(a) { $(a).keyup(function (f) { if ((f.keyCode > 64 && f.keyCode < 91) || f.keyCode == 186) { var d = (String.fromCharCode(f.keyCode)).toUpperCase(); var c = (a.value.charAt(a.value.length - 1)).toUpperCase(); if (d == c || c == "Ç" || c == "ç") { a.value = a.value.substring(0, (a.value.length - 1)) } } }); separador = "("; separador1 = ")"; separador2 = "-"; conjunto1 = 0; conjunto2 = 3; conjunto3 = 8; if (a.value.length < 13) { if (a.value.length == conjunto1) { a.value = a.value + separador } if (a.value.length == 4 && a.value.indexOf(")") == -1) { a.value = a.value.substring(0, 3) + separador1 + a.value.substr(3, 1) } if (a.value.length == conjunto2) { $("html").keyup(function (b) { if (b.keyCode == 8) { } else { if (a.value.length == conjunto2) { a.value = a.value + separador1 } } }) } } if (a.value.length == 13 && a.value.indexOf("-") == 9) { a.value = a.value.replace("-", ""); a.value = a.value.substring(0, 8) + separador2 + a.value.substr(8, 4) } else { if (a.value.length == 12) { a.value = a.value.replace("-", ""); a.value = a.value.substring(0, 8) + separador2 + a.value.substr(8, 4) } else { if (a.value.length > 13) { a.value = a.value.replace("-", ""); a.value = a.value.substring(0, 9) + separador2 + a.value.substr(9, 4) } } } };