Replace Special Characters

1

I need to get the special characters coming from an input in jquery, I'm doing so more is not working. How would you resolve this?

$("#cnpj").focusout(function(){



          // Converte o texto para caixa baixa:
  str = $("#cnpj").val().toLowerCase();

  // Remove qualquer caractere em branco do final do texto:
  str = $("#cnpj").val().replace(/^\s+|\s+$/g, '');

  // Lista de caracteres especiais que serão substituídos:
  const from = "ãàáäâẽèéëêìíïîõòóöôùúüûñç·/_,:;";

  // Lista de caracteres que serão adicionados em relação aos anteriores:
  const to   = "aaaaaeeeeeiiiiooooouuuunc------";

  // Substitui todos os caracteres especiais:
  for (let i = 0, l = from.length; i < l; i++) {
    str = $("#cnpj").val().replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
  }

  // Remove qualquer caractere inválido que possa ter sobrado no texto:
  str = $("#cnpj").val().replace(/[^a-z0-9 -]/g, '');

  // Substitui os espaços em branco por hífen:
  str = $("#cnpj").val().replace(/\s+/g, '-');






        //Início do Comando AJAX
        $.ajax({
            //O campo URL diz o caminho de onde virá os dados
            //É importante concatenar o valor digitado no CNPJ
            url: 'cnpj.php?cnpj='+$str,
//Atualização: caso use java, use cnpj.jsp, usando o outro exemplo.
            //Aqui você deve preencher o tipo de dados que será lido,
            //no caso, estamos lendo JSON.
            dataType: 'json',
            //SUCESS é referente a função que será executada caso
            //ele consiga ler a fonte de dados com sucesso.
            //O parâmetro dentro da função se refere ao nome da variável
            //que você vai dar para ler esse objeto.
            success: function(resposta){
                //Confere se houve erro e o imprime
                if(resposta.status == "ERROR"){
                    alert(resposta.message + "\nPor favor, digite os dados manualmente.");
                    $("#post #nome").focus().select();
                    return false;
                }
                //Agora basta definir os valores que você deseja preencher
                //automaticamente nos campos acima.
                $("#post #nome").val(resposta.nome);
                $("#post #fantasia").val(resposta.fantasia);
                $("#post #atividade").val(resposta.atividade_principal[0].text + " (" + resposta.atividade_principal[0].code + ")");
                $("#post #telefone").val(resposta.telefone);
                $("#post #email").val(resposta.email);
                $("#post #logradouro").val(resposta.logradouro);
                $("#post #complemento").val(resposta.complemento);
                $("#post #bairro").val(resposta.bairro);
                $("#post #cidade").val(resposta.municipio);
                $("#post #uf").val(resposta.uf);
                $("#post #cep").val(resposta.cep);
                $("#post #numero").val(resposta.numero);
            }
        });
    });

Html

<input type="text" class="form-control cnpj" name="cnpj" id="cnpj" placeholder="CNPJ" required>
    
asked by anonymous 04.09.2018 / 16:10

1 answer

1

Below are the functions I use to format and validate the values, both for cpf and for CNPJ:

//funções para validar CPF e CNPJ
        function verifica_cpf_cnpj ( valor ) {

                // Garante que o valor é uma string
                valor = valor.toString();

                // Remove caracteres inválidos do valor
                valor = valor.replace(/[^0-9]/g, '');

                // Verifica CPF
                if ( valor.length === 11 ) {
                    return 'CPF';
                } 

                // Verifica CNPJ
                else if ( valor.length === 14 ) {
                    return 'CNPJ';
                } 

                // Não retorna nada
                else {
                    return false;
                }

                } // verifica_cpf_cnpj

                /*
                calc_digitos_posicoes

                Multiplica dígitos vezes posições

                @param string digitos Os digitos desejados
                @param string posicoes A posição que vai iniciar a regressão
                @param string soma_digitos A soma das multiplicações entre posições e dígitos
                @return string Os dígitos enviados concatenados com o último dígito
                */
                function calc_digitos_posicoes( digitos, posicoes = 10, soma_digitos = 0 ) {

                // Garante que o valor é uma string
                digitos = digitos.toString();

                // Faz a soma dos dígitos com a posição
                // Ex. para 10 posições:
                //   0    2    5    4    6    2    8    8   4
                // x10   x9   x8   x7   x6   x5   x4   x3  x2
                //   0 + 18 + 40 + 28 + 36 + 10 + 32 + 24 + 8 = 196
                for ( var i = 0; i < digitos.length; i++  ) {
                    // Preenche a soma com o dígito vezes a posição
                    soma_digitos = soma_digitos + ( digitos[i] * posicoes );

                    // Subtrai 1 da posição
                    posicoes--;

                    // Parte específica para CNPJ
                    // Ex.: 5-4-3-2-9-8-7-6-5-4-3-2
                    if ( posicoes < 2 ) {
                            // Retorno a posição para 9
                            posicoes = 9;
                    }
                }

                // Captura o resto da divisão entre soma_digitos dividido por 11
                // Ex.: 196 % 11 = 9
                soma_digitos = soma_digitos % 11;

                // Verifica se soma_digitos é menor que 2
                if ( soma_digitos < 2 ) {
                    // soma_digitos agora será zero
                    soma_digitos = 0;
                } else {
                    // Se for maior que 2, o resultado é 11 menos soma_digitos
                    // Ex.: 11 - 9 = 2
                    // Nosso dígito procurado é 2
                    soma_digitos = 11 - soma_digitos;
                }

                // Concatena mais um dígito aos primeiro nove dígitos
                // Ex.: 025462884 + 2 = 0254628842
                var cpf = digitos + soma_digitos;

                // Retorna
                return cpf;

                } // calc_digitos_posicoes

                /*
                Valida CPF

                Valida se for CPF

                @param  string cpf O CPF com ou sem pontos e traço
                @return bool True para CPF correto - False para CPF incorreto
                */
                function valida_cpf( valor ) {

                // Garante que o valor é uma string
                valor = valor.toString();

                // Remove caracteres inválidos do valor
                valor = valor.replace(/[^0-9]/g, '');


                // Captura os 9 primeiros dígitos do CPF
                // Ex.: 02546288423 = 025462884
                var digitos = valor.substr(0, 9);

                // Faz o cálculo dos 9 primeiros dígitos do CPF para obter o primeiro dígito
                var novo_cpf = calc_digitos_posicoes( digitos );

                // Faz o cálculo dos 10 dígitos do CPF para obter o último dígito
                var novo_cpf = calc_digitos_posicoes( novo_cpf, 11 );

                // Verifica se o novo CPF gerado é idêntico ao CPF enviado
                if ( novo_cpf === valor ) {
                    // CPF válido
                    return true;
                } else {
                    // CPF inválido
                    return false;
                }

                } // valida_cpf

                /*
                valida_cnpj

                Valida se for um CNPJ

                @param string cnpj
                @return bool true para CNPJ correto
                */
                function valida_cnpj ( valor ) {

                        // Garante que o valor é uma string
                        valor = valor.toString();

                        // Remove caracteres inválidos do valor
                        valor = valor.replace(/[^0-9]/g, '');


                        // O valor original
                        var cnpj_original = valor;

                        // Captura os primeiros 12 números do CNPJ
                        var primeiros_numeros_cnpj = valor.substr( 0, 12 );

                        // Faz o primeiro cálculo
                        var primeiro_calculo = calc_digitos_posicoes( primeiros_numeros_cnpj, 5 );

                        // O segundo cálculo é a mesma coisa do primeiro, porém, começa na posição 6
                        var segundo_calculo = calc_digitos_posicoes( primeiro_calculo, 6 );

                        // Concatena o segundo dígito ao CNPJ
                        var cnpj = segundo_calculo;

                        // Verifica se o CNPJ gerado é idêntico ao enviado
                        if ( cnpj === cnpj_original ) {
                            return true;
                        }

                        // Retorna falso por padrão
                        return false;

                } // valida_cnpj

                /*
                valida_cpf_cnpj

                Valida o CPF ou CNPJ

                @access public
                @return bool true para válido, false para inválido
                */
                function valida_cpf_cnpj ( valor ) {

                        // Verifica se é CPF ou CNPJ
                        var valida = verifica_cpf_cnpj( valor );

                        // Garante que o valor é uma string
                        valor = valor.toString();

                        // Remove caracteres inválidos do valor
                        valor = valor.replace(/[^0-9]/g, '');


                        // Valida CPF
                        if ( valida === 'CPF' ) {
                            // Retorna true para cpf válido
                            return valida_cpf( valor );
                        } 

                        // Valida CNPJ
                        else if ( valida === 'CNPJ' ) {
                            // Retorna true para CNPJ válido
                            return valida_cnpj( valor );
                        } 

                        // Não retorna nada
                        else {
                            return false;
                        }

                } // valida_cpf_cnpj

                /*
                formata_cpf_cnpj

                Formata um CPF ou CNPJ

                @access public
                @return string CPF ou CNPJ formatado
                */
                function formata_cpf_cnpj( valor ) {

                        // O valor formatado
                        var formatado = false;

                        // Verifica se é CPF ou CNPJ
                        var valida = verifica_cpf_cnpj( valor );

                        // Garante que o valor é uma string
                        valor = valor.toString();

                        // Remove caracteres inválidos do valor
                        valor = valor.replace(/[^0-9]/g, '');


                        // Valida CPF
                        if ( valida === 'CPF' ) {

                            // Verifica se o CPF é válido
                            if ( valida_cpf( valor ) ) {

                                    // Formata o CPF ###.###.###-##
                                    formatado  = valor.substr( 0, 3 ) + '.';
                                    formatado += valor.substr( 3, 3 ) + '.';
                                    formatado += valor.substr( 6, 3 ) + '-';
                                    formatado += valor.substr( 9, 2 ) + '';

                            }

                        }

                        // Valida CNPJ
                        else if ( valida === 'CNPJ' ) {

                            // Verifica se o CNPJ é válido
                            if ( valida_cnpj( valor ) ) {

                                    // Formata o CNPJ ##.###.###/####-##
                                    formatado  = valor.substr( 0,  2 ) + '.';
                                    formatado += valor.substr( 2,  3 ) + '.';
                                    formatado += valor.substr( 5,  3 ) + '/';
                                    formatado += valor.substr( 8,  4 ) + '-';
                                    formatado += valor.substr( 12, 14 ) + '';

                            }

                        }else{
                                return '';
                        }

                        // Retorna o valor 
                        return formatado;

                } // formata_cpf_cnpj
    
04.09.2018 / 16:27