Direct naar de hoofdinhoud
Module 8 · Les 1 van 429/32 in de cursus~12 min
Modulelessen (1/4)

Een e-mail valideren

Een e-mail "correct" valideren is een veel moeilijker probleem dan het lijkt: RFC 5322 is een monster. In de praktijk kiezen we voor een goed genoeg patroon aanvaardt veelvoorkomende gevallen en verwerpt de duidelijk verkeerde gevallen.

Code
Pattern: ^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$
  • [\w.+-]+ -- lokaal gedeelte: letters, cijfers, _, ., +, -.
  • @ -- scheidingsteken.
  • [\w-]+(?:\.[\w-]+)+ -- domein + minstens één TLD gescheiden door ..

Wat het accepteert: mario.rossi@example.com, foo+bar@sub.example.co.uk, BESCHERMD_INLINE_10.

Wat het afwijst: mario@, @example.com, mario@example (geen TLD), spaties.

Afwegingen

Het bovenstaande patroon accepteert niet:

  • Tekenreeksen tussen aanhalingstekens "strange (things)"@example.com (RFC staat ze toe).
  • Domeinen met Unicode-tekens (\u00fcber@m\u00fcnchen.de).
  • Zeer lange TLD's die \w niet passeren (bijvoorbeeld geïnternationaliseerde).

Als je ze nodig hebt, breid dan de klasse uit naar \p{L} met de vlag u, of delegeer deze naar een gespecialiseerde bibliotheek.

Afwegingen en best practices voor e-mailvalidatie

Geen enkele regex kan garanderen dat een e-mailadres daadwerkelijk bestaat. Te complexe patronen verminderen de prestaties en sluiten ongebruikelijke maar geldige domeinen uit. Het is beter om een ​​eenvoudig validatiepatroon te gebruiken om duidelijke typefouten te weigeren en een verificatiecode te verzenden.

Probeer het

Oefening#regex.m8.l1.e1
Pogingen: 0Laden…

Herken elke e-mail in de tekst. Gebruik een eenvoudig patroon: letters/cijfers/punten vóór de @, domein met minimaal één punt.

Editor laden…
Toon hint

Vergroot het lokale deel naar [\\w.+-]+ en het domein naar [\\w-]+\\.[\\w.-]+ om meerdere TLD's te accepteren.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#regex.m8.l1.e2
Pogingen: 0Laden…

Leg het domein (het gedeelte na @) van elke e-mail vast als een benoemde groep `dominio`.

Editor laden…
Toon hint

Verpak het domeingedeelte in een benoemde groep: (?<dominio>[\\w.-]+).

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

Oefening#regex.m8.l1.e3
Pogingen: 0Laden…

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

Editor laden…
Toon hint

Gebruik een positieve lookbehind (?<=@) vóór de domeintekenklasse.

Oplossing beschikbaar na 3 pogingen