Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Estrapolare indirizzo/i mail da una stringa di testo

    Ciao a tutti.
    Dovrei estrapolare una o più email automaticamente da una stronga di testo ed è da ieri che ci sto sbattendo la testa, ma non riesco a saltarci fuori.

    Il codice che ho provato a fare è questo:
    Codice PHP:
    $testo "questo cucciolo è stato trovato x strada nei pressi  di roma. le persone che lo ospitano nn possono tenerlo oltre questo week end, dopodichè nn rimane che il canile.
    lui è un maschietto, presumiamo abbia 2 mesi circa, bellissimo, in canile con questo freddo e così piccolo di età difficilmente sopravviverebbe! cerchiamo adozione urgentissima o appoggio temporaneo in attesa di adozione.
    lo portiamo anche la nord!
    x info adozioni
    339/4981956 carmine
    3317310768 chiara
    x possibili stalli:
    [email]prova1@gmail.com[/email]
    non per altro, ma non mi sta bene
    [email]prova2@gmail.com[/email]"
    ;

    $email stristr($testo"@");
    $posemail strpos($testo"@");

    $posemail $posemail 1;
    while(
    $singola != " " and $singola != "\n"){
        
    $singola substr($testo$posemail1);
        
    $singola2 $singola.$singola2;
        
    $posemail $posemail 1;
    }
    $email str_replace("@""<font color=#FF0000>[b]@[/b]</font>"$email);
    echo(
    "[b]E-Mail:[/b] $singola2$email");
    echo(
    "


    "
    ); 
    Questo codice, sì, mi trova le @, a tra una mail e un'altra mi risulta fuori la stringa: prova1@gmail.com non per altro, ma non mi sta bene prova2@gmail.com .

    Secondo voi come potrei far saltare fuori SOLO gli indirizzi mail e basta per poi metterli in una listbox?

    Grazie di cuore
    Luca Radici

  2. #2
    :master:
    Io prenderei il testo, e poi farei un explode per ogni spazio che vi è contentuo.
    L'explode genera in questo modo un array per ogni parola che ha trovato.
    Ciclando poi il tutto e andando a passare ogni parola con una regexp andrei a scoprire se e semmai quanti indirizzi email sono stati trovati.

    Butto giu un po' di codice al volo, ma testalo perché non ne ho tempo.

    Codice PHP:
    $testo "questo cucciolo è stato trovato x strada nei pressi  di roma. le persone che lo ospitano nn possono tenerlo oltre questo week end, dopodichè nn rimane che il canile. 
    lui è un maschietto, presumiamo abbia 2 mesi circa, bellissimo, in canile con questo freddo e così piccolo di età difficilmente sopravviverebbe! cerchiamo adozione urgentissima o appoggio temporaneo in attesa di adozione. 
    lo portiamo anche la nord! 
    x info adozioni 
    339/4981956 carmine 
    3317310768 chiara 
    x possibili stalli: 
    [email]prova1@gmail.com[/email] 
    non per altro, ma non mi sta bene 
    [email]prova2@gmail.com[/email]"
    ;

    // creo un array di ogni singola parola
    $array_parole explode(" "$testo);
    // conto di quante righe è composto l'array, 
    // per cui di quante parole è il testo
    $numero_parole count($array_parole);

    // ciclo l'array andando a controllare ogni singola parola
    for ($i 0$i <= $numero_parole$i++) {
    // se in una parola, trovo
        
    if(preg_match("/^[a-zA-Z][a-zA-Z0-9_\.]*@[a-zA-Z][a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9_]*)+$/",$array_parole[$i])) {
             
    $array_email[] = $array_parole[$i];
        }


    Credo sia chiaro come lo script mi ritorni un array contenente tutte le email che trova nel testo.
    Lo script potrebbe essere migliorato grazie (ad esempio) ad un semplice controllo sulla variabile $numero_parole: se è uguale a 0, allora non ha senso andare a fare il ciclo successivo.

    Chiama per qualsiasi errore.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3
    Scusami, ho scritto una stupidaggine.
    {autocitazione}
    Lo script potrebbe essere migliorato grazie (ad esempio) ad un semplice controllo sulla variabile $numero_parole: se è uguale a 0, allora non ha senso andare a fare il ciclo successivo.
    Per la fretta ho riletto male lo script e quindi scritto male.

    Intendevo dire che, per migliorare lo script, potresti andare a contare gli elementi presenti nell'array $array_email[] e quindi sapere se questo è vuoto oppure no.

    Scusami per l'inesattezza.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  4. #4
    Grazie 1000 per tutto! Ora provo.

    Ma c'è un manuale online con tutte le finzioni di PHP sulle stringhe?

    Grazie 1000 ancora!
    Luca Radici

  5. #5
    Purtroppo però non mi memorizza nulla nell'array....
    Luca Radici

  6. #6
    Ok, funziona, ma ho un'ultimo problema...

    Come posso dire di conteggiare anche, altre gli spazi anche \r e \n ?

    $array_parole = explode(" ", $testo);
    $array_parole = explode("\n", $testo);
    $array_parole = explode("\r", $testo);

    ...ma tutto insieme?




    Grazie ancora!!!!!!
    Luca Radici

  7. #7
    Ok risolto!

    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Documento senza titolo</title>
    </head>

    <body>
    <?
    $testo 
    "questo cucciolo è stato trovato x strada nei pressi  di roma. le persone che lo ospitano nn possono tenerlo oltre questo week end, dopodichè nn rimane che il canile.
    lui è un maschietto, presumiamo abbia 2 mesi circa, bellissimo, in canile con questo freddo e così piccolo di età difficilmente sopravviverebbe! cerchiamo adozione urgentissima o appoggio temporaneo in attesa di adozione.
    lo portiamo anche la nord!
    x info adozioni
    x possibili stalli:
    [email]prova_1@gmail.com[/email]
    non per altro, ma non mi sta bene
    [email]prova-2@gmail.com[/email]"
    ;

    $testo ereg_replace("\r"" "$testo);
    $testo ereg_replace("\n"" "$testo);
    $testo ereg_replace("/"""$testo);
    echo(
    "[b]Testo:[/b] $testo");
    echo(
    "


    "
    );

    // creo un array di ogni singola parola
    $array_parole explode(" "$testo);
    // conto di quante righe è composto l'array,
    // per cui di quante parole è il testo
    $numero_parole count($array_parole);
    echo(
    "[b]Il numero di parole sono[/b]: $numero_parole

    "
    );

    // ciclo l'array andando a controllare ogni singola parola
    for ($i 0$i <= $numero_parole$i++) {
    // se in una parola, trovo @
        
    if(strstr($array_parole[$i], "@")) {
             
    $array_email[] = $array_parole[$i];
        }
    }
    $lungh_arraycount($array_email);
    echo 
    "Sono state trovate [b]$lungh_array[/b] mail
    "
    ;
    echo 
    "[b]Mails:[/b]
    "
    ;
    for (
    $contatore=0$contatore $lungh_array$contatore++) {
        
    $email str_replace("@""<font color=#FF0000>[b]@[/b]</font>"$array_email[$contatore]);
        echo 
    "<input type=checkbox name=email$contatore id=email$contatore />$email
    "
    ;
    }
    ?>
    </body>
    </html>
    Luca Radici

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