none
máscara celular de 8 ou 9 dígitos RRS feed

  • 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

    segunda-feira, 24 de setembro de 2012 00:51

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
    quinta-feira, 27 de setembro de 2012 17:23
  • 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
    sexta-feira, 28 de setembro de 2012 03:56

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

    segunda-feira, 24 de setembro de 2012 16:19
  • Olá Priscila,

    Voce concorda comigo que o SP pode ter 9 digitos ex 98888-8888 ou 8 dígitos ex: 3421-8876 ai tá o problema

    segunda-feira, 24 de setembro de 2012 16:26
  • 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
    quinta-feira, 27 de setembro de 2012 17:23
  • 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
    sexta-feira, 28 de setembro de 2012 03:56
  • Funcionou certinho.

    Para mais detalhes:

    Nono Dígito - Anatel


    Júnior Pacheco

    terça-feira, 27 de novembro de 2012 20:16
  • 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
    terça-feira, 20 de agosto de 2013 21:22
  • 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) } } } };

    segunda-feira, 2 de setembro de 2013 18:13