RegEx – Regola per ricercare nel sito come Google!

Ti interessa di sicuro se:

  • Hai un sito e vuoi creare un motore di ricerca interno
  • Stai creando un’app e vuoi un buon filtro (filter per AngularJS) per la ricerca
  • Vuoi creare un link automatico per la ricerca tramite GET
  • Sei patito di RegEx (o RegExp in javascript)

La regola è semplice:

/^(?=.*parola1)(?=.*parola2).*$/gim

Ecco qui. Con questa “semplice” regola si avrà un motore di ricerca che funziona con le seguenti regole:

  • Ogni parola DEVE comparire almeno una volta
  • Ogni parola può essere una parte del testo (‘lan’ è dentro ‘Milano’ e dentro ‘lana’)
  • Può essere una parola come 100, al sistema non cambia

ORA. Come si automatizza la cosa?

Dipende dal linguaggio di programmazione che usi. Ad esempio questo l’ho fatto con Ionic per un’app ibrida.

Visto che i progetti Ionic sono uno diverso dall’altro, il codice specifico sarebbe poco utile. Posso darti qualche linea guida:

  1. crea un Array con le singole parole del campo di ricerca (separandoli per ” ” spazi)
  2. ogni parola dovrà creare
    regex = regex+'(?=.*'+singolaParola+')';

    o in php

    $regex = $regex.'(?=.*'.$singolaParola.')';
  3. creiamo l’espressione finale con
    regex = new RegExp('^'+regex+'.*$',"gim");
  4. Basterà usare
    if(regex.exec(variabileDoveCercareIlTesto)!=null){/*Qui il codice se viene trovato nel testo*/}

    e il gioco è fatto!

UN CONSIGLIO PREZIOSO

Consapevoli dei problemi che il charset pone in ogni progetto, si potrebbe avere del testo in ISO o LATIN o UTF8 e avere problemi.

Il consiglio che do è quello di creare una funzione che elimina i caratteri speciali e lascia solamente lettere semplici e numeri, così chi userà una “è” verra tolta, e non si avranno fastidiosi problemi (non è un e accentata che cambia le sorti una ricerca, insomma è solo una e accentata!).

Un esempio di funzione che elimina le lettere accentate in javascript può essere:

function rimuoviAccenti(text){
    text = text.replace(/(à|è|ì|ò|ù)/gi, " ");
    return text;
 }
 

Basta aggiungere le lettere da togliere in linea 2 e ognuna di quelle lettere verrà sostituita con uno spazio.

Annunci
  1. Lascia un commento

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: