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.
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
\wniet 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
Herken elke e-mail in de tekst. Gebruik een eenvoudig patroon: letters/cijfers/punten vóór de @, domein met minimaal één punt.
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
Leg het domein (het gedeelte na @) van elke e-mail vast als een benoemde groep `dominio`.
Toon hint
Verpak het domeingedeelte in een benoemde groep: (?<dominio>[\\w.-]+).
Oplossing beschikbaar na 3 pogingen
Extra uitdaging
Find the domain part of an email (everything after `@`), excluding the `@` sign using lookbehind.
Toon hint
Gebruik een positieve lookbehind (?<=@) vóór de domeintekenklasse.
Oplossing beschikbaar na 3 pogingen