Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,573

    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
    187
    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,573
    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,284
    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,573
    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

  6. #6
    Ciao a tutti

    sono nuovo del fourm e sto "cercando" di imparare l'utilizo delle RegEx ma la partenza è difficile.

    Cmq avrei necessità di estrarre da una stringa tipo questa

    Arterial Road<BR><BR><B>CODICE</B> = 5/a<BR><B>NOME_STRADA</B> = Anguillarese

    la parte evidenziata in rosso (la parte variabile) tenendo condo che le stringhe hanno anche l'ultima parola (Anguillarese in questo caso) che varia.

    Grazie per il supporto

    Francesco

  7. #7
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,284
    Salve Francesco, benvenuto.

    Imparare le espressioni regolari non è così complicato ma richiede un po' di tempo per comprenderne a fondo i meccanismi.
    Tempo fa avevo fornito qualche indicazione e qualche link utile in questo post: https://forum.html.it/forum/showthre...1#post25516144
    può essere un punto di partenza.

    Venendo alla tua richiesta è bene precisare che per poter impostare al meglio una espressione regolare (quindi codificare un pattern) è opportuno definire in modo preciso il "modello" della stringa su cui si vuole operare; cioè, in modo particolare è importante definire nella maniera più specifica possibile le parti fisse, quelle variabili e chiaramente ciò che si vuole "catturare", nonché la composizione stessa delle varie parti (in sostanza i caratteri che costituiscono le varie parti), fornendo eventualmente più esempi e i loro relativi output che ci si aspetta di ottenere.

    Detto questo, il tuo esempio e le indicazioni fornite potrebbero essere non sufficienti per poter comprendere come impostare un opportuno pattern.

    Tuttavia, per quanto hai indicato (tenendo giusto conto delle parti fisse e di quelle variabili), questa potrebbe essere una soluzione:
    Codice PHP:
    $stringa "Arterial Road<BR><BR><B>CODICE</B> = 5/a<BR><B>NOME_STRADA</B> = Anguillarese";
    echo 
    preg_match("/^Arterial Road<BR><BR><B>CODICE<\/B> = (.*)<BR><B>NOME_STRADA<\/B> = .*$/"$stringa,  $corrispondenze) ? corrispondenze[1] : "nessun risultato"
    In questo caso l'output (corrispondenze[1]) è esattamente "5/a".

    Occhio ai caratteri ^ e $ i quali indicano rispettivamente che la stringa deve iniziare e terminare in quelle specifiche posizioni all'interno della riga di testo. Dal momento che non hai esposto il contesto in cui sta quella stringa, chiaramente do per scontato che si tratti di una singola riga di testo, per questo ho specificato in quel modo la posizione iniziale e finale della riga.

    Se non dovesse funzionare ti suggerisco, come già accennato, di fornire maggiori indicazioni ed esempi.


    ---
    PS: in genere è meglio non "agganciarsi" a discussioni altrui per esporre una propria richiesta; è invece preferibile aprire una nuova discussione dove indicare tutti i dettagli del proprio caso, così da evitare che gli argomenti si aggroviglino (anche se magari fanno parte di uno stesso tema, le dinamiche possono comunque differire). Ho segnalato al moderatore di sezione, non so se provvederà a separare la tua richiesta da questa discussione, ad ogni modo è un consiglio per le prossime volte.
    Ultima modifica di KillerWorm; 07-02-2019 a 20:51
    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!

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 © 2019 vBulletin Solutions, Inc. All rights reserved.