Redazione
a- a+

Espressioni regolari in PHP

Vediamo cosa sono, come funzionano ed a cosa servono le espressioni regolari (regular expression).

Una espressione regolare definisce una funzione che prende in ingresso una stringa e restituisce in uscita un valore del tipo sì/no, a seconda che la stringa segua o meno un certo pattern.

Ad esempio, tutti gli indirizzi e-mail devono essere costituiti nel seguente modo: cominciare con una sequenza di caratteri alfanumerici, seguiti dal simbolo chiocciola, seguiti da altri caratteri alfanumerici, seguiti dal punto, seguiti da due lettere. Questa regola informale diventerebbe una “regular expression” abbreviato regex, qualora fosse codificata secondo una sintassi ben precisa e riconosciuta da un programma in grado di analizzare le stringhe.

Analizziamo l’esempio precedente. L’espressione regex per l’email è la seguente:

^ [A-Za-z0-9-_ .+%]+@[ A-Za-z0-9-.] + . [A-Za-z] {2,4} $

L’inizio può essere rilevato come un ritorno a capo. Utilizzando il simbolo ^ si indica al motore regex che il confronto deve iniziare all’inizio della riga.

^ [A-Za-z0-9-_ .+%]+@[ A-Za-z0-9-.] + . [A-Za-z] {2,4} $

Invece di specificare ogni carattere dell’alfabeto, abbiamo una scorciatoia che dà un intervallo. Di solito è case sensitive, quindi dovrete specificare sia un intervallo di maiuscole che di minuscole.

^ [A-Za-z0-9-_ .+%]+@[ A-Za-z0-9-.] + . [A-Za-z] {2,4} $

Lo stesso vale per i numeri, possiamo semplicemente ridurre a una serie invece di scrivere tutte le 10 cifre.

^ [A-Za-z0-9-_ .+%]+@[ A-Za-z0-9-.] + . [A-Za-z] {2,4} $

Possiamo fare in modo di permettere una serie di caratteri speciali: un trattino, underscore, punto, segno più e segno di percentuale.

^ [A-Za-z0-9-_ .+%]+@[ A-Za-z0-9-.] + . [A-Za-z] {2,4} $

Le parentesi quadre racchiudono il nostro range di valori in modo da poter prendere in modo efficace tutto quello che viene considerato valido. Inoltre abbiamo creato un jolly personalizzato. Il nostro "jolly" è in grado di soddisfare qualsiasi lettera in maiuscolo o minuscolo, una cifra 0-9, o uno dei nostri caratteri di punteggiatura speciali.

^ [A-Za-z0-9-_ .+%]+@[ A-Za-z0-9-.] + . [A-Za-z] {2,4} $

Si tratta di un quantificatore, indica quante volte il carattere precedente deve corrispondere; in questo caso, il carattere precedente è l’insieme tra parentesi. + Vuol dire "almeno uno", così nel nostro esempio, dopo la compensazione iniziale della stringa, dobbiamo avere nella nostra stringa almeno uno dei caratteri alfanumerici compresi all’interno delle parentesi.

A questo punto siamo in grado di controllare una email.

Oltre al simbolo + come quantificatore, c’è il simbolo * che è quasi identico, tranne che corrisponderà a tutti. Se abbiamo sostituito il quantificatore + con * otteniamo:

^ [A-Za-z0-9-_ .+%]*@[ A-Za-z0-9-.] + . [A-Za-z] {2,4}

Succederebbe che verrebbero considerate valide le stringhe del tipo  string@xxxxx.yyy come stiamo effettivamente dicendo, ma anche quando la parte iniziale manca l’email verrebbe considerata valida: @xxxxx.yyy (sbagliando)

Torniamo al nostro modello originale:

^ [A-Za-z0-9-_ .+%]+@[ A-Za-z0-9-.] + . [A-Za-z] {2,4} $

Ora abbiamo abbinato la parte iniziale con la chiocciola simbolo dell’email @

^ [A-Za-z0-9-_ .+%]+@[ A-Za-z0-9-.] + . [A-Za-z] {2,4} $

Questa porzione di espressione è simile a quello che abbiamo visto prima, ma questa volta non stiamo permettendo il trattino basso, segno più, o il segno di percentuale.

^ [A-Za-z0-9-_ .+%]+@[ A-Za-z0-9-.] + . [A-Za-z] {2,4} $

Qui abbiamo un punto. Lo “slash” che lo precede indica di considerarlo come una lettera. Quando si è dentro le parentesi ogni carattere verrebbe considerato lettera anche senza lo slash, fuori delle parentesi avrebbe un significato speciale come un quantificatore. Fuori dalle parentesi, il punto deve essere seguito da uno “slash”.

^ [A-Za-z0-9-_ .+%]+@[ A-Za-z0-9-.] + . [A-Za-z] {2,4} $

Ricordate come abbiamo inizialmente creato il nostro jolly personalizzato utilizzando le parentesi? Possiamo fare una cosa simile con le graffe per creare dei quantificatori personalizzati. {2,4} significa che possiamo effettuare l’operazione di confronto per almeno due volte, ma non più di quattro volte. Se volevamo effettuare un confronto esattamente due volte, scriveremo {2}.
Nel nostro caso {2,4} è il nostro quantificatore speciale che limita l’ultimo jolly a solo 2, 3 o 4 lettere.

^ [A-Za-z0-9-_ .+%]+@[ A-Za-z0-9-.] + . [A-Za-z] {2,4} $

$ È la controparte di ^. Proprio come fa ^ che indica l’inizio, $ indica la fine.

In PHP possiamo utilizzare le espressioni regolari utilizzando le funzioni:

 

preg_match()preg_replace()preg_match_all()