[Javascript] RegExp

eraclio666

Nuovo Utente
8 Mag 2015
28
0
1
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??
 
Ho trovato su internet questa soluzione

‘^TRANI’

Ma non so dove applicarl

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.mrw.it/javascript/espressioni-regolari_6838.html


Inviato dal mio iPhone utilizzando Tapatalk
 
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
 
Quindi sta sempre tra i : e una parentesi ( ??? Es: ... : QUELLO CHE MI INTERESSA ( ...


Inviato dal mio iPhone utilizzando Tapatalk
 
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:
  • Like
Reactions: eraclio666
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
 
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
 

Discussioni simili