[Javascript] RegExp

Discussione in 'Javascript' iniziata da eraclio666, 20 Luglio 2019.

  1. eraclio666

    eraclio666 Nuovo Utente

    Registrato:
    8 Maggio 2015
    Messaggi:
    28
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Occupazione:
    programmatore/web designer
    Località:
    barletta
    Buongiorno,
    ammetto di essere un neofita in JS, ma mi divincolo egregiamente tra il codice.

    Sto impazzendo da ieri per uno script di un calcolo di codice fiscale, trovato on-line, per il mio form di anagrafica

    il problema è in questa funzione:

    Codice:
    CFisc.trova_comune=function(pattern_comune)
    {
      var codice,comune,ret=[]
      var quoted=pattern_comune.replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1");
      var re=new RegExp(quoted,'i')
     
     
        
      for(codice in this.codici_catastali)
      {
      
        comune=this.codici_catastali[codice]
        
        
        
        if(comune.match(re)){
            ret.push([comune,codice])
        
            
        } 
      }
        
      return ret
          
    }
    


    passo il comune inserito dall'utente (pattern_comune) correttamente
    (ho anche verificato tutte le variabili se arrivano con il valore giusto in questa funzione).

    A questo punto, la funzione fa una ricerca tra i comuni catastali per ricavarne il codice da inserire nel cf,


    Codice:
    for(codice in this.codici_catastali)
      {
      
        comune=this.codici_catastali[codice]
        
        
        
        if(comune.match(re)){
            ret.push([comune,codice])
        
            
        } 
      }
    ma mi dà un problema, nell if se (per esempio)
    re è TRANI, mi restituisce tutti i comuni che contengono TRANI, tipo ATRANI e questo mi incasina poi il calcolo del CF. (vi lascio immaginare i casini che mi crea quando la città è VO )


    Come posso fare per risolvere questo problema??? Non esiste un metodo per dire che voglio solo TRANI e non le variabili che contengono TRANI??
     
  2. eraclio666

    eraclio666 Nuovo Utente

    Registrato:
    8 Maggio 2015
    Messaggi:
    28
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Occupazione:
    programmatore/web designer
    Località:
    barletta
    Ho trovato su internet questa soluzione

    ‘^TRANI’

    Ma non so dove applicarl
     
  3. otto9due

    otto9due Utente Attivo

    Registrato:
    22 Febbraio 2014
    Messaggi:
    529
    Mi Piace Ricevuti:
    21
    Punteggio:
    28
    Nelle espressioni regolari il simbolo ^ significa ( che inizia esattamente con .. ) e il simbolo $ messo alla fine significa ( che finisce esattamente con ). Qui sul sito trovi una guida su come usarle..

    Quintrovi una guida veramente ben fatta, sulle espressioni regolari : https://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html

    Quinqualche esmpio su vome utilizzarle con javascript:
    https://www.mrwebmaster.it/javascript/espressioni-regolari_6838.html


    Inviato dal mio iPhone utilizzando Tapatalk
     
  4. eraclio666

    eraclio666 Nuovo Utente

    Registrato:
    8 Maggio 2015
    Messaggi:
    28
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Occupazione:
    programmatore/web designer
    Località:
    barletta
    Grazie per la risposta, lunedì la proverò

    Il problema che riscontro è perché l’elenco dei comuni associati è così composto

    CODICE : TRANI (BA)
    A669 : BARLETTA (BA)
    .....
    .....


    Quindi quando esegue la ricerca ha bisogno di scomporre il nome del comune tra il calore delle parentesi
     
  5. otto9due

    otto9due Utente Attivo

    Registrato:
    22 Febbraio 2014
    Messaggi:
    529
    Mi Piace Ricevuti:
    21
    Punteggio:
    28
    Quindi sta sempre tra i : e una parentesi ( ??? Es: ... : QUELLO CHE MI INTERESSA ( ...


    Inviato dal mio iPhone utilizzando Tapatalk
     
  6. eraclio666

    eraclio666 Nuovo Utente

    Registrato:
    8 Maggio 2015
    Messaggi:
    28
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Occupazione:
    programmatore/web designer
    Località:
    barletta
    Esatto e non so come applicare il metodo
     
  7. otto9due

    otto9due Utente Attivo

    Registrato:
    22 Febbraio 2014
    Messaggi:
    529
    Mi Piace Ricevuti:
    21
    Punteggio:
    28
    Scusa per il ritardo, ma ero da cellulare e non riuscivo neanche a provarle.
    Prova così.. ( vedi il risultato in clonsole )
    Basta semplicemente andare ad aprire il risultato del primo gruppo di parentesi tonde.
    Si può certamente migliorare ma dovrebbe funzionare se le analizzi ad una ad una le righe.

    HTML:
    <!DOCTYPE html>
    <html>
    <head>
    <title>Try jQuery Online</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script>
    var myString = "test: MILANO (MI)"; // Stringa da analizzare
    
    var arr = /: (\w*) \(/img.exec(myString);
    
    console.log(arr[1]);  // MILANO
    
    </script>
    </head>
    <body>
    
    </body>
    </html>
     
    Ultima modifica: 22 Luglio 2019
    A eraclio666 piace questo elemento.
  8. eraclio666

    eraclio666 Nuovo Utente

    Registrato:
    8 Maggio 2015
    Messaggi:
    28
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Occupazione:
    programmatore/web designer
    Località:
    barletta
    Grazie Otto9due,

    ora sto riprendendo in mano il codice, ho cercato di approfondirlo e cercare di inserire il pattern che a me serviva ma senza successo, ora posto il codice della funzione che mi genera il problema e la funzione con elenco catastali


    Codice:
    CFisc.trova_comune=function(pattern_comune)
    {
      var codice,comune,ret=[]
      var quoted=pattern_comune.replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1");
        //var quoted=pattern_comune.replace(/^([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1");
      var re=new RegExp(quoted,'i')
     
      document.cf.test.value = re
        
      for(codice in this.codici_catastali)
      {
      
        comune=this.codici_catastali[codice]
        
        
            //if(comune.match(re)){
              
        if(comune.match(re)){     
        //if(comune == 'TRANI (BA)'){
        //if(comune.match(re)){
            ret.push([comune,codice])
        //document.cf.test.value = ret
            
        } 
      }
        
      return ret
          
    }



    Questo è invece il codice della funzione catastali


    Codice:
    <script>
    CFisc.codici_catastali={
    "A001":"ABANO TERME (PD)",
    "A004":"ABBADIA CERRETO (LO)",
    "A005":"ABBADIA LARIANA (LC)",
    "A006":"ABBADIA SAN SALVATORE (SI)",
    "A007":"ABBASANTA (OR)",
    "A008":"ABBATEGGIO (PE)",
    "A010":"ABBIATEGRASSO (MI)",
    "A012":"ABETONE (PT)",
    "A013":"ABRIOLA (PZ)",
    "A014":"ACATE (RG)",
    "A015":"ACCADIA (FG)",
    "A016":"ACCEGLIO (CN)",
    "A017":"ACCETTURA (MT)",
    "A018":"ACCIANO (AQ)",
    "A019":"ACCUMOLI (RI)",
    "A020":"ACERENZA (PZ)",
    "A023":"ACERNO (SA)",

    Ovviamente l'elenco è lunghissimo
     
  9. eraclio666

    eraclio666 Nuovo Utente

    Registrato:
    8 Maggio 2015
    Messaggi:
    28
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Occupazione:
    programmatore/web designer
    Località:
    barletta
    sembra che abbia trovato una soluzione,
    Codice:
    CFisc.trova_comune=function(pattern_comune)
    {
      var codice,comune,ret=[]
      var quoted=pattern_comune.replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1");
      //var quoted=pattern_comune.replace(/\, "");
      //var re=new RegExp(quoted,'i')
      var re=new RegExp('^'+quoted,'i')
    
      //document.cf.test.value = re
        
      for(codice in this.codici_catastali)
      {
      
        comune=this.codici_catastali[codice]
        //document.cf.test.value = comune
        
        if(comune.match(re)){
              
        //if(comune.match(re)){     
        //if(comune == 'TRANI (BA)'){
    
            ret.push([comune,codice])
        document.cf.test.value = ret
            
        } 
      }
        
      return ret
          
    }


    questa linea di codice

    var re=new RegExp('^'+quoted,'i')


    mi risolve il problema, anche se per alcune città (VO per esempio), in ret mi genera un elenco di comuni che iniziano per VO
     
Sto caricando...

Condividi questa Pagina