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
da 0 a 9

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
C

\S

.NET, Python 3, JavaScript: "carattere di spazio vuoto": qualsiasi separatore Unicode

un\sb\sc

da
C

\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
CD

\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-
aggiungendo nuove linee, a cui il punto normale non corrisponde

[\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
(tutti i principali motori tranne JS)

\Aabc[\d\D]*

abc (stringa...
...inizio)

\z

Fine della stringa
Non disponibile in Python e JS

la fine\z

questa è...\n... la fine

\Z

Fine della stringa o (tranne Python) prima dell'interruzione di riga finale
Non disponibile in JS

la fine\Z

questa è...\n... la fine \n

\G

Inizio della stringa o fine della corrispondenza precedente
.NET, Java, PCRE (C, PHP, R…), Perl, Ruby

\B

Confine di parola
La maggior parte dei motori: posizione in cui solo un lato è una lettera ASCII, una cifra o un trattino basso

Bob.*\bcat\b

Bob ha mangiato il gatto

\B

Confine di parola
.NET, Java, Python 3, Ruby: posizione in cui solo un lato è una lettera Unicode, una cifra o un trattino basso

Bob.*\b\кошка\b

Bob ha mangiato la кошка

\B

Nessun confine di parola

c.*\Bcat\B.*

imitatori

We use cookies to enhance your browsing experience and analyze site traffic. By clicking "Accept", you consent to our use of cookies. Privacy Policy