Espressioni regolari e convalida dei dati nei moduli
Espressioni regolari e convalida dei dati nei moduli
Cosa sono le espressioni regolari e come utilizzarle?
Un'espressione regolare, o regex in breve, è un pattern che descrive una certa quantità di testo. Ad esempio, se si desidera assicurarsi che la persona che compila un modulo invii esattamente il testo richiesto, è possibile utilizzare un'espressione regolare per imporre un determinato pattern di input o per convalidare i dati.
Ad esempio, supponiamo di voler richiedere un National Insurance Number (NIN) del Regno Unito. Questo codice è composto da 2 caratteri, seguiti da 6 cifre, seguite da un altro carattere. Un'espressione regolare che corrisponde a questo schema sarebbe:
[az|AZ]{2}[0-9]{6}[az|AZ]
Qui [az] significa "qualsiasi carattere minuscolo", [AZ] significa "qualsiasi carattere maiuscolo", | significa o, quindi [az|AZ] significa "qualsiasi carattere", {2} significa "ripeti due volte" ecc.
Alcuni governi forniscono espressioni regolari per modelli di uso comune. Ad esempio, si veda questo articolo di Wikipedia sui codici postali del Regno Unito.
Per una rapida panoramica sulle espressioni regolari, cerca una "Guida alle espressioni regolari" oppure continua a leggere.
Carattere | Leggenda | Esempio | Esempio di corrispondenza |
|---|---|---|---|
\D | La maggior parte dei motori: una cifra | file_\d\d | file_25 |
\D | .NET, Python 3: una cifra Unicode in qualsiasi script | file_\d\d | file_9੩ |
\w | La maggior parte dei motori: "carattere di parola": lettera ASCII, cifra o trattino basso | \w-\w\w\w | A-b_1 |
\w | .Python 3: "carattere di parola": lettera Unicode, ideogramma, cifra o trattino basso | \w-\w\w\w | 字-ま_۳ |
\w | .NET: "carattere di parola": lettera Unicode, ideogramma, cifra o connettore | \w-\w\w\w | 字-ま‿۳ |
\S | La maggior parte dei motori: "carattere di spazio vuoto": spazio, tabulazione, nuova riga, ritorno a capo, tabulazione verticale | un\sb\sc | da |
\S | .NET, Python 3, JavaScript: "carattere di spazio vuoto": qualsiasi separatore Unicode | un\sb\sc | da |
\D | Un carattere che non è una cifra come definito dal \d del tuo motore | \D\D\D | ABC |
\O | Un carattere che non è un carattere di parola come definito dal \w del tuo motore | \W\W\W\W\W | *-+=) |
\S | Un carattere che non è uno spazio vuoto come definito dal \s del tuo motore | \S\S\S\S | Yo-yo |
Quantificatori
Quantificatore | Leggenda | Esempio | Esempio di corrispondenza |
|---|---|---|---|
+ | Uno o più | Versione \w-\w+ | Versione A-b1_1 |
{3} | Esattamente tre volte | \D{3} | ABC |
{2,4} | Da due a quattro volte | \d{2,4} | 156 |
{3,} | Tre o più volte | \w{3,} | regex_tutorial |
* | Zero o più volte | A*B*C* | AAACC |
? | Una volta o nessuno | plurali? | plurale |
Altri personaggi
Carattere | Leggenda | Esempio | Esempio di corrispondenza |
|---|---|---|---|
. | Qualsiasi carattere eccetto l'interruzione di riga | corrente alternata | abc |
. | Qualsiasi carattere eccetto l'interruzione di riga | .* | non importa, amico. |
\ . | Un punto (carattere speciale: deve essere preceduto da un carattere di escape \) | a\.c | corrente alternata |
\ | Fughe di un carattere speciale | \.\*\+\? \$\^\/\\ | .*+? $^/\ |
\ | Esce da un carattere speciale | \[\{\(\)\}\] | [{()}] |
Logica
Logica | Leggenda | Esempio | Esempio di corrispondenza |
|---|---|---|---|
| | Operando alternanza / OR | 22|33 | 33 |
( … ) | Gruppo di cattura | A(nt|pple) | Apple (cattura "pple") |
\1 | Contenuto del Gruppo 1 | r(\w)g\1x | espressione regolare |
\2 | Contenuto del Gruppo 2 | (\d\d)\+(\d\d)=\2\+\1 | 12+65=65+12 |
(?: … ) | Gruppo non catturante | A(?:nt|pple) | Mela |
Più spazio bianco
Carattere | Leggenda | Esempio | Esempio di corrispondenza |
|---|---|---|---|
\T | Scheda | T\t\w{2} | Tab ab |
\R | Carattere di ritorno a capo | vedi sotto | |
\N | Carattere di avanzamento riga | vedi sotto | |
\r\n | Separatore di riga su Windows | AB\r\nCD | AB |
\N | Perl, PCRE (C, PHP, R…): un carattere che non è un'interruzione di riga | \N+ | ABC |
\H | Perl, PCRE (C, PHP, R…), Java: un carattere di spazio orizzontale: separatore di tabulazione o spazio Unicode | ||
\H | Un carattere che non sia uno spazio orizzontale | ||
\v | .NET, JavaScript, Python, Ruby: scheda verticale | ||
\v | Perl, PCRE (C, PHP, R…), Java: un carattere di spazio verticale: avanzamento riga, ritorno a capo, tabulazione verticale, avanzamento pagina, separatore di paragrafo o di riga | ||
\V | Perl, PCRE (C, PHP, R…), Java: qualsiasi carattere che non sia uno spazio verticale | ||
\R | Perl, PCRE (C, PHP, R…), Java: un'interruzione di riga (coppia ritorno a capo + avanzamento riga e tutti i caratteri corrispondenti a \v) |
Altri quantificatori
Quantificatore | Leggenda | Esempio | Esempio di corrispondenza |
|---|---|---|---|
+ | Il + (uno o più) è "avido" | \d+ | 12345 |
? | Rende i quantificatori "pigri" | \d+? | 1 su 1 2345 |
* | * (zero o più) è "avido" | UN* | AAA |
? | Rende i quantificatori "pigri" | UN*? | vuoto in AAA |
{2,4} | Da due a quattro volte, "avido" | \w{2,4} | abcd |
? | Rende i quantificatori "pigri" | \w{2,4}? | ab in ab cd |
Classi di personaggi
Carattere | Leggenda | Esempio | Esempio di corrispondenza |
|---|---|---|---|
[…] | Uno dei personaggi tra parentesi | [AEIOU] | Una vocale maiuscola |
[…] | Uno dei personaggi tra parentesi | T[ao]p | Tocca o tocca in alto |
- | Indicatore di autonomia | [az] | Una lettera minuscola |
[xy] | Uno dei caratteri nell'intervallo da x a y | [AZ]+ | GRANDE |
[…] | Uno dei personaggi tra parentesi | [AB1-5w-z] | Uno tra: A,B,1,2,3,4,5,w,x,y,z |
[xy] | Uno dei caratteri nell'intervallo da x a y | [ -~]+ | Caratteri nella sezione stampabile della tabella ASCII . |
[^x] | Un carattere che non è x | [^az]{3} | A1! |
[^xy] | Uno dei caratteri non compreso nell'intervallo da x a y | [^ -~]+ | Caratteri che non sono presenti nella sezione stampabile della tabella ASCII . |
[\d\D] | Un carattere che è una cifra o un non-cifra | [\d\D]+ | Qualsiasi carattere, inc- |
[\x41] | Corrisponde al carattere nella posizione esadecimale 41 nella tabella ASCII, ovvero A | [\x41-\x45]{3} | ABE |
Ancore e confini
Ancorare | Leggenda | Esempio | Esempio di corrispondenza |
|---|---|---|---|
^ | Inizio della stringa o inizio della riga, a seconda della modalità multiriga. (Ma quando [^tra parentesi], significa "non") | ^abc .* | abc (inizio riga) |
$ | Fine stringa o fine riga a seconda della modalità multilinea. Molte sottigliezze dipendenti dal motore. | .*? la fine$ | questa è la fine |
\UN | Inizio della stringa | \Aabc[\d\D]* | abc (stringa... |
\z | Fine della stringa | la fine\z | questa è...\n... la fine |
\Z | Fine della stringa o (tranne Python) prima dell'interruzione di riga finale | la fine\Z | questa è...\n... la fine \n |
\G | Inizio della stringa o fine della corrispondenza precedente | ||
\B | Confine di parola | Bob.*\bcat\b | Bob ha mangiato il gatto |
\B | Confine di parola | Bob.*\b\кошка\b | Bob ha mangiato la кошка |
\B | c.*\Bcat\B.* | imitatori |