Visualizzazione dei risultati da 1 a 5 su 5

Discussione: estrapolare parte di una stringa o di un array

  1. #1
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,562

    estrapolare parte di una stringa o di un array

    Salve, sto cercando di capire come fare ad ottenere questo:
    ho un campo "numero_telefono" che contiene vari numeri di telefono separati dalla virgola
    è possibile che il primo sia uno 0775 o uno 051 o un 335.
    Io vorrei estrarre solo il primo numero di cellulare, quindi il primo di questi che ha un 3 (ha senso?!) come "carattere" iniziale (o all'inizio o dopo la virgola)
    devo dividere il numero in un array?

    grazie in anticipo a chiunque mi darà una mano

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2011
    residenza
    Arezzo
    Messaggi
    184
    Secondo me è molto più semplice se splitti la stringa in un array, per ogni elemento controlli che inizi con "3" e magari la lunghezza che sia 9 o 10 caratteri (certo questo controllo potrebbe essere da aggiornare il giorno in cui i cellulari diventano di 11 cifre).
    Devi essere però sicuro che il divisore dei numeri sia sempre la virgola, e che non ci siano nr. di cellulare che iniziano ad esempio con 0039 0 +39
    Riccardo Sadocchi
    Microsoft MCP C#

  3. #3
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,562
    era la mia idea... la butto là.. mi sa che è ok..
    $stringa = "095345456655,337484884,32505050,02060660";$pezzo_ stringa = explode(",", $stringa);

    $contatore = count($pezzo_stringa);

    for($i=0;$i< $contatore; $i++) {

    if($pezzo_stringa[$i][0] == "3") {
    $stringotutto = $pezzo_stringa[$i];
    break;
    }

    }
    echo $stringotutto;

    restituisce "37484884"
    se modifico la stringa così
    $stringa = "095345456655,32505050,02060660,337484884";
    restituisce 32505050


    e alla prima occorrenza che trova esce dal ciclo..
    dovrebbe andare..

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,116
    Ciao, puoi risolvere anche con una semplice espressione regolare:
    codice:
    $stringa = "95345456655,32505050,02060660,337484884";
    echo preg_match("/(?:^|,)(3[^,]+)/", $stringa, $primo_cell) ? $primo_cell[1] : "nessun risultato";
    In questo caso il pattern è piuttosto semplice:
    (?:^|,)(3[^,]+)

    (?:^|,) gruppo non-catturante, identifica la presenza di inizio stringa o di una virgola
    (3[^,]+) primo gruppo di cattura
    3 trova il carattere 3
    [^,] trova qualsiasi carattere che non sia una virgola
    + quantificatore, trova da 1 a più elementi della precedente specifica

    Poi, a seconda delle tue esigenze, si potrebbe impostare un pattern più complesso.

    $primo_cell è sostanzialmente un array di tutte le occorrenze trovate dove $primo_cell[0] restituisce l'occorrenza trovata dall'intero pattern mentre $primo_cell[1] non è altro che l'occorrenza trovata col primo gruppo di cattura.

    Nota: ho usato un operatore ternario ( ? : ) con l'echo, così che se viene trovato qualcosa (preg_match() restituisce il numero di occorrenze trovate) allora stampa appunto il primo gruppo catturato, altrimenti stampa il testo "nessun risultato".

    Questa condizione è necessaria per evitare messaggi di errore qualora non venga trovato nulla e si tenti di accedere all'elemento [1] dell'array $primo_cell che però risulta vuoto. Chiaramente questo controllo può essere impostato come meglio si crede e a seconda delle proprie esigenze.
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 15% tra i post del forum; il 9% sul web.
    Ti resta l’1% ... usalo bene!

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

  5. #5
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,562
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    In questo caso il pattern è piuttosto semplice:
    eh già, è semplice PER TE...
    comunque grazie ora me lo studio.. le espressioni regolari sono il confine della mia conoscenza
    grazie ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2018 vBulletin Solutions, Inc. All rights reserved.