Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Variáveis em expressão regular


Anderson Ferreira

Pergunta

Olá galera,

Em uma escala de 0 a 10, meu conhecimento em expressões regulares é 1 ou 2.

E estou precisando de algo de extrema importância, para um projeto profissional, e não estou conseguindo. Por isso preciso da ajuda de vocês

Tenho um campo, onde o usuário terá que digitar seu endereço. A medida que ele for digitando, com o autocomplete do jQuery (e Ajax), faço uma busca no meu banco de dados (que possui todos endereços nacionais), e é retornado para o usuário uma lista de endereços semelhantes com aquile que ele digitou, então ele escolhe um endereço desta lista.

O problema é que no banco de dados, os endereços estão com o logradouro completo (e não abreviado), como por exemplo: Rua, Alameda, Avenida, etc.

Mas se o usuário digita: Av. (ao invés de Avenida), é óbvio que o banco de dados não irá retornar nenhum endereço. Por isso, com JavaScript, penssei fazer com que, ao digitar Av., Ele substituisse por Avenida. Ao digitar R., ele substituisse por Rua. E assim por diante.

Para isso, criei a seguinte função no JS:

logradouros = new Array();
logradouros = ["Acamp.|Acampamento", "Al.|Alameda", "Av.|Avenida", "Bl.|Bloco", "Chac.|Chácara", "Cj.|Conjunto", "Cond.|Condomínio", "Dt.|Distrito", "Faz.|Fazenda", "Jd.|Jardim", "Lg.|Lago", "Lot.|Loteamento", "R.|Rua", "Trav.|Travessa", "Tv.|Travessa", "Vl.|Vila"];

valueCampo = $("#endereco").val();

for(i=0; i<logradouros.length; i++) {
    item = logradouros[i];
    item = item.split("|");

    regex = new RegExp(item[0],"i");
    novoValueCampo = valueCampo.replace(regex, item[1]);
    if(valueCampo != novoValueCampo) {
        $("#endereco").val(novoValueCampo);
    }
}
Até ai tudo bem. Se o usuário digitar: "Av.", será substituido pro "Avenida". O problema é que se o usuário digitar "Av " (sem o ponto), não será substituido. Então penssei colocar na expressão regular, a opção de o "." ser opcional. Então, ficaria assim a expressão regular para este exemplo da Avenida que dei:
regex = /[A][v][.]?\s/;

Ou seja, o "A" e o "v" obrigatório, o "." opcional e o " " (espaço) obrigatório.

O problema que isso eu fiz manualmente. O que preciso, é que ao invés de manualmente eu colocar: "[A][v]" na expressão regular, isso seja preenchido com o conteúdo da array "logradouros" (que criei no código lá em cima).

---

Resumindo toda minha pergunta em apenas 1 frase: Como usar variáveis em expressões regulares no JavaScript, neste exemplo que dei acima?

Agradeço muito aqueles que tentarem me ajuda. Inclusive, se possível, precisaria da ajuda um pouco rápido (não querendo abusar da boa vontade), é que é algo profissional, e não pessoal.

Obrigado mesmo,

Abraços,

Anderson Ferreira

Editado por Anderson Ferreira
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

i aew Anderson Ferreira, bom não entende muito bem o que você ta querendo fazer, mas vê se isso te ajuda:

<html>
    <head>
    <script type='text/javascript'>

        window.onload = function(){
            var inp = document.getElementById( 'endereco' );
            inp.onkeyup = function(){

                var logradouros = { acamp:"Acampamento", 
                    al:"Alameda", 
                    av:"Avenida", 
                    bl:"Bloco", 
                    chac:"Chácara", 
                    cj:"Conjunto", 
                    cond:"Condomínio", 
                    dt:"Distrito", 
                    faz:"Fazenda", 
                    jd:"Jardim", 
                    lg:"Lago", 
                    lot:"Loteamento", 
                    r:"Rua", 
                    trav:"Travessa", 
                    tv:"Travessa", 
                    vl:"Vila"
                    };

                var regEXP = /^(Acamp|Al|Av|Bl|Chac|Cj|Cond|Dt|Faz|Jd|Lg|Lot|R|Trav|Tv|Vl)\.? /i;
                var ret = null;
                if ( ret = regEXP.exec(this.value) ){
                    var json = ret[0].toLowerCase().replace(/[^a-z]/i,'');
                    document.getElementById( 'modificado' ).value = eval("logradouros." + json);
                } else {
                    document.getElementById( 'modificado' ).value = "não encontrou";
                }
            }

            

        }

    </script>
    </head>
    <body>
        endereco: <input type='text' id='endereco' /><br />
        replace do endereco: <input type='text' id='modificado' disabled/>
    </body>
</html>

espero que ajude abraço!

Editado por Romerito
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...