Visualizzazione risultati 1 fino 5 di 5

Discussione: Ricerca case insnsitive e con nome parziali tramite la funzione glob()

  1. #1
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,771

    Predefinito Ricerca case insnsitive e con nome parziali tramite la funzione glob()

    Salve

    Non so se dal titolo ci capisce, ma, avrei la necessità di cercare una directory, tramite la funzione glob(), pur non sapendo il nome completo della directory.

    Ora spiego meglio, supponiamo che voglio cercare tutti i file nella directory Mia_directory, ma non so il nome completo della directory, ricordo solo che inizia per Mia, come posso fare?

    Ho provato inserendo il carattere speciale % ( come si fa con sql ) con glob("%Mia%/*") ma non va

    In più, posso in qualche modo rendere la ricerca della directory Case insensitive?

    Sevenjeak
    Software developer and much more

  2. #2
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,409

    Predefinito

    Salve,
    con js e semplici librerie come hilitor.js, si dovrebbe riuscire ad implementare tutto ciò senza troppa fatica anche per una lista di cartelle generata con glob().

    Non avendo controllato se la libreiria è ancora disponibile sul sito ufficiae, ne lascio qui una copia,

    Esempio:
    Codice HTML:
    <span style="float:right;margin-right:10px;"><label>Cerca nella pagina: </label><input type="text" id="barra-ricerca" onkeyup="CercaParole('barra-ricerca','content')" placeholder="Cerca una parola..."></span>
    
    <script>
    function Highlight(inputid,targetid){
      window.addEventListener("DOMContentLoaded", function(e) {
        var newHilitor = new Hilitor(targetid);
        newHilitor.setMatchType("left");
        document.getElementById(inputid).addEventListener("keyup", function(e) {
          newHilitor.apply(this.value);
        }, false);
      }, false);
    }
    
    function CercaParole(tab,lists) {
      var input,filtro,lista,voci,x,i,testo;
      
      input = document.getElementById(tab);
      filtro = input.value.toUpperCase();
      lista = document.getElementById(lists);
      voci = lista.getElementsByTagName("li");
      for (i = 0; i < voci.length; i++) {
        x = lista.getElementsByTagName("a")[i];
        testo = x.textContent || x.innerText;
        if (testo.toUpperCase().indexOf(filtro) > -1) {
          voci[i].style.display = "";
        }else {
          voci[i].style.display = "none";
        }
      }
    }	
    Highlight('barra-ricerca','content')
    </script>
    
    <div id="content">
      <ol>
        <li><a href="">Mia_directory/Demo.php</a></li>
        <li><a href="">Mia_directory/Demo1.html</a></li>   
        <li><a href="">Mia_directory/Demo2.php</a></li>
        <li><a href="">Mia_directory/Esempio.html</a></li>
        <li><a href="">Altro.php</a></li>
        <li><a href="">Contatti.html</a></li>
        <li><a href="">Pagina1.html</a></li>	
        <li><a href="">esempio-di-qualcosa.php</a></li>
        <li><a href="">Pagina12.html</a></li>
        <li><a href="">Qualcosa.php</a></li>
        <li><a href="">About.php</a></li>
        <li><a href="">Qualcosa_Non_Va.php</a></li>	
      </ol>
    <div>
    In pratica, con tale implementazione, con glob() si provvede solo a generare l'elenco delle cartelle, mentre al filtraggio della ricerca ci pensa il codice js.

    Ora nell'esempio, per far prima, mi sono basato su un mio progetto e ho tralasciato la parte d'implementazione relativa a PHP, visto che poi non mi sembra sia un neofita in materia.

    Se poi non paice l'idea o c'è dell'atro, nessun problema, chieda pure.

    Cordial saluti.
    Ultima modifica di GraphOGLRisorse : 14-02-2025 alle ore 23.02.59 Motivo: Aggiunta di Mia_directory/ nell'esempio

  3. #3
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,898

    Predefinito

    Il carattere jolly in glob è l'asterisco, quindi dovrebbe essere:

    Codice PHP:
    glob("Mia*/*");
    Per il case insensitive, puoi guardare l'esempio 2 della documentazione dove usa le espressioni regolari, dovrebbe essere una cosa come:
    Codice PHP:
    glob("{[Mm][Ii][Aa]*/*}", GLOB_BRACE);
    (non l'ho provato, poi semmai fammi sapere che ci guardo meglio!).

    Ciao!
    Ultima modifica di alemoppo : 14-02-2025 alle ore 21.43.46

  4. #4
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,409

    Predefinito

    In aggiunta a quanto riportato da alemoppo, usando solo PHP, la ricerca con case insensitive la si può fare così:
    Codice PHP:
    <?php
    $search
    = "Mia";

    foreach(
    glob("*/*", GLOB_BRACE) as $filename) {
    if(
    preg_match("/$search/i", $filename)){
    echo
    "$filename\n";
    }
    }
    ?>
    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 15-02-2025 alle ore 01.05.21

  5. #5
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,771

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Il carattere jolly in glob è l'asterisco...
    Al momento in qui ho scritto il codice non ci ho pensato, e pensare che lo sapevo pure

    Comunque, entrambe le soluzione, sia quelle proposte da te, che sia quelle proposte da GraphOGLRisorse vanno più che bene, grazie a tutte e due per la risposta

    Sevenjeak
    Software developer and much more

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •