Salt la conținutul principal
Modulul 8 · Lecția 1 din 429/32 în curs~12 min
Lecții din modul (1/4)

Validarea unui e-mail

Validarea unui e-mail „corect” este o problemă mult mai grea decât pare: RFC 5322 este un monstru. În practică, alegem un model suficient de bun care acceptă cazurile comune și le respinge pe cele evident greșite.

Code
Pattern: ^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$
  • [\w.+-]+ -- parte locală: litere, cifre, _, ., +, -.
  • @ -- separator.
  • [\w-]+(?:\.[\w-]+)+ -- domeniu + cel puțin un TLD separat de ..

Ce acceptă: mario.rossi@example.com, foo+bar@sub.example.co.uk, user_123@test-domain.io.

Ceea ce respinge: mario@, @example.com, mario@example (fără TLD), spații.

Compensații

Modelul de mai sus nu acceptă:

  • Șiruri ghilimele "strange (things)"@example.com (RFC le permite).
  • Domenii cu caractere Unicode (\u00fcber@m\u00fcnchen.de).
  • TLD-uri foarte lungi care nu trec de \w (de exemplu, cele internaționalizate).

Dacă aveți nevoie de ele, extindeți clasa la \p{L} cu indicatorul u sau delegați unui bibliotecă de specialitate.

Compensații și cele mai bune practici pentru validarea e-mailului

Nicio regex nu poate garanta că o adresă de e-mail există cu adevărat. Tiparele prea complexe degradează performanța și exclud domenii neobișnuite, dar valide. Este mai bine să utilizați un model de validare simplu pentru a respinge greșelile evidente și a trimite un cod de verificare.

Încearcă

Exercițiu#regex.m8.l1.e1
Încercări: 0Se încarcă…

Recunoașteți fiecare e-mail din text. Utilizați un model simplu: litere/cifre/puncte înainte de @, domeniul cu cel puțin un punct.

Se încarcă editorul...
Afișează indiciu

Extindeți partea locală la [\\w.+-]+ și domeniul la [\\w-]+\\.[\\w.-]+ pentru a accepta mai multe TLD-uri.

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#regex.m8.l1.e2
Încercări: 0Se încarcă…

Capturați domeniul (partea de după @) al fiecărui e-mail ca grup numit „dominio”.

Se încarcă editorul...
Afișează indiciu

Înfășurați partea de domeniu într-un grup numit: (?<dominio>[\\w.-]+).

Soluție disponibilă după 3 încercări

Provocare suplimentară

Exercițiu#regex.m8.l1.e3
Încercări: 0Se încarcă…

Find the domain part of an email (everything after `@`), excluding the `@` sign using lookbehind.

Se încarcă editorul...
Afișează indiciu

Utilizați o privire pozitivă în urmă (?<=@) în fața clasei de caractere de domeniu.

Soluție disponibilă după 3 încercări