Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 26 di 67
  • livello intermedio
Indice lezioni

Le espressioni regolari in PHP

Scopriamo come utilizzare le espressioni regolari (o regex) in PHP per identificare e validare gruppi di stringhe. Analizziamo le regole delle espressioni regolari e la sintassi PCRE.
Scopriamo come utilizzare le espressioni regolari (o regex) in PHP per identificare e validare gruppi di stringhe. Analizziamo le regole delle espressioni regolari e la sintassi PCRE.
Link copiato negli appunti

Espressioni regolari e pattern

Un'espressione regolare è una stringa, definita pattern, che contiene al suo interno una serie di simboli attraverso i quali è possibile identificare gruppi di stringhe.

Proviamo a semplificare la definizione attraverso un esempio. Supponiamo di avere la necessità di verificare che una stringa contenga al suo interno uno username valido per la nostra applicazione, quali sono i controlli da effettuare? Probabilmente almeno i seguenti:

  • la stringa contiene caratteri alfabetici minuscoli e numeri;
  • la stringa può contenere anche i simboli "_" e "-";
  • la stringa deve essere di lunghezza compresa tra 3 e 15 caratteri.

Effettuare tutte queste verifiche senza le espressioni regolari (o regex) può risultare piuttosto macchinoso. Come già detto, un'espressione regolare è infatti un insieme di simboli che ci permette di determinare se una stringa rispetta o meno le condizioni dei simboli, ovvero il pattern. Nel caso dell'esempio il pattern per verificare uno username corretto è il seguente:

/^[a-z0-9_-]{3,15}$/

Ad un primo sguardo questa serie di caratteri può sembrare incomprensibile ma andiamo a scomporla ed analizzarla.

  1. Innanzitutto in PHP un qualsiasi pattern deve iniziare e terminare con il carattere /.
  2. Il simbolo ^ indica che la stringa deve iniziare con il pattern indicato. Senza questo simbolo la stringa può fare match, cioè viene identificata dal pattern, se il pattern si trova in qualsiasi punto della stringa.
  3. [a-z0-9_-] indica che i caratteri ammessi sono tutte le lettere minuscole dalla a alla z, i numeri da 0 a 9 e i simboli _ e -
  4. {3,15} indica che deve essere di lunghezza compresa tra 3 e 15
  5. Il simbolo $ indica che la stringa deve terminare con il pattern appena visto. Non sono quindi ammessi caratteri aggiuntivi al pattern.

Validazione delle stringhe con le regex

Ora che abbiamo analizzato alcune delle regole di un'espressione regolare probabilmente ci stiamo chiedendo come fare con PHP a verificare che la stringa sia valida o meno. Per determinarlo possiamo usare la funzione preg_match(). Tale funzione prende in ingresso principalmente tre parametri:

  1. il $pattern;
  2. il $subject ovvero la stringa da verificare;
  3. $matches ovvero un array in cui, opzionalmente, vengono salvati i risultati della ricerca.

L'esempio diventerà quindi:

$username = 'dymissy86';
if (!preg_match('/^[a-z0-9_-]{3,15}$/', $username)) {
    echo "Lo username non è valido";
} else {
    echo "Username valido";
}

Dato che lo username passato come parametro è formalmente valido, verrà stampato un messaggio di successo. Se invece $username fosse uguale a Dymissy86 riceveremo un errore perché contiene un carattere maiuscolo.

Sintassi PCRE

Le regole delle espressioni regolari appartengono alla famiglia PCRE (Perl Compatible Regular Expressions). Vediamo insieme quali sono i meta caratteri che definiscono la sintassi delle regex.

Meta carattere Descrizione
\ Carattere generico di escape
^ Delimitatore di inizio della stringa
$ Delimitatore di fine della stringa
. Definisce ogni carattere eccetto il carattere di invio
[ Carattere di inizio della definizione di classe
] Carattere di fine della definizione di classe
| Inizio di un ramo alternativo
( Inizio subpattern
) Fine subpattern
? Indica 0 o 1 occorrenze
* 0 o più occorrenze
+ 1 o più occorrenze
{ Inizio intervallo minimo/massimo di occorrenze
} Fine intervallo minimo/massimo di occorrenze
- Indica un range di caratteri all'interno di parentesi []
. Indica un singolo carattere
\s Un carattere di spaziatura (space, tab, newline)
\S Tutto eccetto un carattere di spaziatura
\d Un carattere numerico (0-9)
\D Tutto eccetto un carattere numerico
\w Una lettera (a-z, A-Z, 0-9, _)
\W Tutto eccetto una lettera
[aeiou] Uno dei caratteri compresi nella parentesi
[^aeiou] Tutto eccetto i caratteri compresi nella parentesi
(foo|bar|baz) Una delle alternative tra parentesi

Una volta definiti e compresi i meta caratteri possiamo iniziare a lavorare con le espressioni regolari. Nella prossima lezione vedremo insieme altri esempi di regex e quali sono le funzioni più importanti messe a disposizione da PHP.

Ti consigliamo anche