Le regular expressions (espressioni regolari) servono per descrivere dei modelli di stringa. E’ possibile verificare, ad esempio, se un codice fiscale o un indirizzo email sono stati inseriti correttamente.
Un’espressione regolare è una stringa, definita pattern, che contiene al suo interno una serie di simboli attraverso i quali è possibile identificare gruppi di stringhe.
Con il rilascio della versione 5.3 di PHP le funzioni ereg per le espressioni regolari POSIX sono state dichiarate deprecate e verranno rimosse dalla release 6 del linguaggio; utilizzarle non è quindi più una buona pratica, chi desidera impiegare un’alternativa potrà farlo grazie alle funzioni PCRE.
Un’applicazione immediata è quella di controllare i caratteri inseriti in una form che poi verrà usata per fare una query in un database. Il controllo della lunghezza e del tipo di caratteri immessi è fondamentale affinché la query successiva possa aver esito positivo.
Questo controllo è alla base delle pagine dinamiche.
Eccone un esempio:
preg_match()
controllo che lo username sia corretto ossia che contenga solo caratteri minuscoli e lettere, inoltre che abbia lunghezza minima 3 e massima 15.
Inoltre il comando deve essere sempre compreso tra //
Un altro esempio è il seguente:
Che fornisce come output:
340
8652066
quindi estrae il prefisso ed il numero di telefono. Si è usato il comando \d per identificare i numeri e \d* per prendere tutta la sequenza di numeri.
Proviamo solo a pensare quali controlli si devono fare in C++ per la coerenza del dato ed invece la potenza di tale comando.
Adesso unisco i due esempi precedenti supponendo di aver creato una form in cui ho richiesto il numero di telefono e devo controllare il campo e successivamente prendere il prefisso ed il numero di telefono:
Questa tabella mostra tutti i parametri che possono essere inseriti
Meta carattere | Descrizione |
---|---|
\ | Carattere generico di escape |
^ | Delimitatore di inizio della stringa |
DOLLARO | 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 |
preg_match_all()
E’ un comando simile al precedente solo che estrae tutte le occorrenze presente nel criterio di ricerca, ad esempio il seguente estratto di codice:
che cerca i codici numerici all’interno della stringa e fornisce come output i tre numeri.
preg_replace()
Si può sostituire un’espressione con un’altra.
Parametro | Descrizione |
---|---|
DOLLAROpattern | Pattern di ricerca. |
DOLLAROreplacement | La stringa che verrà sostituita. |
DOLLAROsubject | Stringa da sostituire. |
DOLLAROlimit | Limite delle sostituzioni da effettuare (opzionale). |
in questo esempio sostituisco i numeri di telefono con degli asterischi, si pensi ad esempio ad una password immessa che deve essere sostituita con degli asterischi o viceversa.