Espressioni regolari

Espressioni regolari

Le Espressioni Regolari (RE, Regular Expressions, RegExp) sono una piccola sorta di linguaggio universale, condiviso (a meno di qualche piccola “influenza dialettale”) fra molti linguaggi di programmazione, editor, sistemi operativi.

Le RE servono per capire se una data stringa soddisfa certe caratteristiche formali. Ad esempio se si stratta di un indirizzo e-mail, o di un numero di carta di credito, o di qualsiasi cosa vogliate definibile da delle regole fisse.

Con gli editor che le utilizzano si possono fare delle ricerche e/o manipolazioni dei file di testo davvero pericolose, pardon, potenti! 🙂

Noi le utilizziamo per controllare che i dati di input inseriti dall’utente attraverso la nostra interfaccia siamo congruenti. Sta a noi decidere quanto vogliamo che questa verifica sia precisa.

Facciamo degli esempi:

L’espressione regolare “abc” significa la sequenza di questi 3 caratteri: abc.

“.” significa invece un singolo, qualsiasi, carattere.

Perciò “ab.c” significa una qualsiasi stringa di 4 caratteri di cui i primi 2 uguali ad “ab” e l’ultimo uguale a “c”, come ad esempio abEc, abbc, ab8c, etc..

“*” significa: ripetizione del carattere precedente 0 o più volte.

“+” significa: ripetizione del carattere precedente 1 o più volte.

La rete contiene, oltre ad un infinita documentazione al riguardo, anche degli utili validatori (configurabili per tipo di linguaggio di programmazione, a volte). Si vedano, ad esempio freeformatter   e regex101 .

Vediamo ora quali espressioni regolari abbiamo impiegato nel nostro progetto, per la validazione dell’input.

 

Validazione della data nel formato aaaa-mm-gg

Vediamo inizialmente il significato della RE seguente: ^\d{4}-\d{2}-\d{2}$
inizio stringa (^)
4 caratteri numerici
un trattino –
2 caratteri numerici
un trattino
altri 2 caratteri numerici
fine della stringa

Quindi le date vanno espresse, con formalismo internazionale, come ad es. 2019-04-01, 1967-03-17, etc.
Possiamo già notare che siamo stati troppo laschi con la nostra RE. Infatti per come è ora, validerebbe anche stringhe come 1978-99-00 o 0000-00-00. Dobbiamo sapere noi se ci basta,
Noi abbiamo voluto essere un poco più stringenti usando la seguente:

^2\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
ovvero tutte le stringhe che
iniziano con un carattere “2”
seguito da altri 3 numeri (e cosi’ abbiamo definito tutti gli anni dal 2000 al 2999)
un trattino
una sequenza di 2 cifre tale che sia una delle 2 seguenti alternative:
  > – 0 seguito da una cifra nel range 1-9
  > 1 seguito da una cifra nel range 0-2

(quindi le cifre dei mesi da 01, 02 … 09, 10, 11, 12)

un trattino
una sequenza di 2 cifre tale che sia una delle 3 seguenti alternative:
  > 01, 02, … 09
  > 1 o 2 seguiti da una qualsiasi altra cifra
  > 3 seguito da 0 oppure 1

 

Validazione del tipo di danza swing

Abbiamo utilizzato la RE seguente:

^(balboa|Balboa|lindy|Lindy|lindy hop|Lindy hop|charleston|Charleston|collegiate shag|Collegiate shag|shag|Shag|\\s|,)*$
Il simbolo “|” (pipe) significa “or” (oppure).
Quindi noi accettiamo come input una string che contenta una o più delle stringhe elencate: balboa, Lindy hop, shag, le loro varianti in maiuscolo/minuscolo, il carattere spazio e il carattere virgola.

 

Validazione dell’indirizzo del sito internet

Abbiamo utilizzato la RE seguente:

^(https?://)?([a-z.-]+).([a-z.]{2,6})([/w .-]*)*/?$
La stringa potrà iniziare (^) con 0 oppure 1 occorrenza (?) della stringa “https://” in cui la “s” a sua volta è opzionale (?)
da 1 a infiniti caratteri fra tutte le lettere minuscole, il punto e il trattino
.
da 0 a infinite volte la sequenza descritta nelle prossime 2 righe
da 2 a 6 caratteri fra tutte le lettere minuscole e il punto
da 0 a infiniti caratteri fra gli alfanumerici (\w) lo spazio, il punto, il trattino
l’opzionale carattere \
No Comments

Sorry, the comment form is closed at this time.