Vai al contenuto
eLearner.app
Modulo 8 · Lezione 1 di 429/32 nel corso~12 min
Lezioni del modulo (1/4)

Validare un’email

Validare un'email "correttamente" e' un problema molto piu' difficile di quanto sembri: la RFC 5322 e' un mostro. In pratica scegliamo un pattern abbastanza buono che accetta i casi comuni e rifiuta quelli ovviamente sbagliati.

Code
Pattern: ^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$
  • [\w.+-]+ -- parte locale: lettere, cifre, _, ., +, -.
  • @ -- separatore.
  • [\w-]+(?:\.[\w-]+)+ -- dominio + almeno un TLD separato da ..

Cosa accetta: mario.rossi@example.com, foo+bar@sub.example.co.uk, user_123@test-domain.io.

Cosa rifiuta: mario@, @example.com, mario@example (no TLD), spazi.

Compromessi

Il pattern sopra non accetta:

  • Stringhe quotate "strane (cose)"@example.com (RFC permette).
  • Domini con caratteri Unicode (\u00fcber@m\u00fcnchen.de).
  • TLD molto lunghi che non passano \w (es. internazionalizzati).

Se ti servono, allarga la classe a \p{L} con flag u, oppure delega a una libreria specializzata.

Compromessi e best practice per validare email

Nessuna regex può garantire l'esistenza reale di una casella email. I pattern troppo complessi degradano le prestazioni ed escludono domini legittimi insoliti. È preferibile usare una validazione di base per scartare errori macroscopici e inviare un codice di verifica.

Prova tu

Esercizio#regex.m8.l1.e1
Tentativi: 0Caricamento…

Riconosci ogni email nel testo. Usa un pattern semplice: lettere/cifre/punti prima della @, dominio con almeno un punto.

Caricamento editor…
Mostra suggerimento

Allarga la parte locale a [\\w.+-]+ e il dominio a [\\w-]+\\.[\\w.-]+ per accettare TLD multipli.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#regex.m8.l1.e2
Tentativi: 0Caricamento…

Cattura il dominio (parte dopo la @) di ogni email come gruppo nominato `dominio`.

Caricamento editor…
Mostra suggerimento

Avvolgi la parte del dominio in un gruppo nominato: (?<dominio>[\\w.-]+).

Soluzione disponibile dopo 3 tentativi

Sfida aggiuntiva

Esercizio#regex.m8.l1.e3
Tentativi: 0Caricamento…

Trova la parte del dominio di un'email (tutto ciò che segue la `@`), escludendo la `@` tramite lookbehind.

Caricamento editor…
Mostra suggerimento

Usa un lookbehind positivo (?<=@) davanti alla classe dei caratteri di dominio.

Soluzione disponibile dopo 3 tentativi