Vediamo uno snippet Semplicissimo in PHP per estrarre indirizzi email da un testo qualsiasi (ad esempio il digest di un CSV, o il body di un messaggio email).
Purtroppo non sempre i dati da cui dobbiamo estrapolare dei valori sono sempre ben strutturati, in questi casi possiamo appoggiarci alle espressioni regolari. Le regex o espressioni regolari ci permettono di trovare dei pattern definiti da noi mediante dei codici alfanumerici (quantificatori, metacaratteri, caratteri) all’interno di un insieme di caratteri o testo in input, diamo per scontate queste conoscenze in questo snippet, la parte dei regex utilizzata tuttavia è molto semplice ed è facilmente comprensibile 🙂 .
Prerequisiti
- Conoscenze basilari di PHP
- Conoscenze Espressioni regolari
L’espressione regolare delle email
Partiamo dall’espressione regolare che rappresenta un qualsiasi indirizzo email: [\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+\.+[\._a-zA-Z0-9-]
parafrasando un po’ questa espressione identifica tutte le email formate da:
- una sequenza arbitraria di caratteri alfanumerici e simboli(maiuscoli / minuscoli / cifre) i simboli ‘.’ , ‘-‘ e ‘ _’
- il simbolo ‘@’
- Una sequenza analoga alla prima
- Il simbolo ‘.’
- La stessa sequenza arbirtraria
Come funziona questo snippet?
Abbiamo creato una funzione PHP che effettua il controllo di $text e ritorna un array contente tutte gli indirizzi email trovati all’interno del testo in input. Se siamo sicuri che all’interno dell’input sia presente solo un indirizzo email (ad esempio un messaggio di posta) possiamo effettuare una return della prima posizione dell’array, non sarà così necessario ciclare o convertire il risultato. L’algoritmo si basa sulla funzione preg_match_all che ritorna un’array di tutte le occorrenze dell’espressione regolare fornita in input,
LO SNIPPET
Di seguito lo snippet, pronto per il copia-incolla ?
1 2 3 4 5 6 7 8 9 | /** * Developer Corsaro.it - Email address Extractor * Website: https://developercorsaro.it * cesare@developercorsaro.it */ function dcEmailExtractor($text) { preg_match_all("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+\.+[\._a-zA-Z0-9-]+/i", $text, $found); return $found; // Se c'è solo un indirizzo email: return $found[0]; } |
Utilizzi
Al sottoscritto questa funzione è servita per estrarre degli indirizzi email dai mittenti di una casella Imap tramite un’installazione Laravel, ma le applicazioni sono infinite, ricordatevi solo che in caso di formati particolari può essere necessario effettuare una conversione di $text in un formato leggibile