PHP – Le espressioni regolari – regular expressions

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 carattereDescrizione
\Carattere generico di escape
^Delimitatore di inizio della stringa
DOLLARODelimitatore 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
\sUn carattere di spaziatura (space, tab, newline)
\STutto eccetto un carattere di spaziatura
\dUn carattere numerico (0-9)
\DTutto eccetto un carattere numerico
\wUna lettera (a-z, A-Z, 0-9, _)
\WTutto 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.

ParametroDescrizione
DOLLAROpatternPattern di ricerca.
DOLLAROreplacementLa stringa che verrà sostituita.
DOLLAROsubjectStringa da sostituire.
DOLLAROlimitLimite 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.

Über Francesco Bragadin

Insegno informatica e telecomunicazioni al liceo scienze applicate ed all'indirizzo informatica e telecomunicazioni. Ho terminato gli studi in ingegneria elettronica e telecomunicazioni lavorando per molti anni come libero professionista nell'ambito della gestione storage e disaster recovery su mainframe.
Dieser Beitrag wurde unter Senza categoria veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.