Ik ben bezig met een validatiefunctie in C# (maakt even niet uit welk platform het voor geschreven wordt in dit geval) die alle valide e-mail adressen volgens RFC valideert en alles daarbuiten niet valideert. Hiervoor heb ik een unit test geschreven die eerst een lijst van correcte mailadressen checkt of ze werken, en vervolgens een lijst met foutieve mailadressen checkt of ze inderdaad niet valideren. Deze lijsten heb ik samengesteld vanuit twee bronnen op het internet die de formattering van een mailadres beschrijven.
Goed:
Ik heb het nu zo opgelost dat de escapes buiten quotes ook gewoon valideren, en de ASCII-leestekens buiten '!', '#', '$', '%', '&', '\'', '*', '+', '-', '/', '=', '.', '?', '^', '_', '`', '{', '|', '}' en '~' niet, dus die twee edge cases heb ik verwijderd. Maar wat is nou echt goed? Ik kom er met de RFC's toch ook niet helemaal uit, en teh interwebz is ook een beetje conflicterend wat betreft dat soort details.
Goed:
- me@example.com
- a.nonymous@example.com
- name+tag@example.com
- a.name+tag@example.com
- name\@tag@example.com – this is a valid email address containing two @ symbols.
- spaces\ are\ allowed@example.com
- "spaces may be quoted"@example.com
- !#$%&'*+-/=.?^_`{|}~@[1.0.0.127]
- !#$%&'*+-/=.?^_`{|}~@[IPv6:0123:4567:89AB:CDEF:0123:4567:89AB:CDEF]
- me(this is a comment)@example.com
- niceandsimple@example.com
- a.little.unusual@example.com
- a.little.more.unusual@dept.example.com
- much."more\ unusual"@example.com
- very.unusual."@".unusual.com@example.com
- very."(),:;<>[]".VERY."very@\\\ \"very".unusual@strange.example.com
- Abc.example.com (an @ character must separate the local and domain parts)
- Abc.@example.com (character dot(.) is last in local part)
- Abc..123@example.com (character dot(.) is double)
- A@b@c@example.com (only one @ is allowed outside quotation marks)
- a"b(c)d,e:f;g<h>i[j\k]l@example.com (none of the special characters in this local part is allowed outside quotation marks)
- just"not"right@example.com (quoted strings must be dot separated, or the only element making up the local-part)
- this is"not\allowed@example.com (spaces, quotes, and backslashes may only exist when within quoted strings and preceded by a slash)
- this\ still\"not\\allowed@example.com (even if escaped (preceded by a backslash), spaces, quotes, and backslashes must still be contained by quotes)
- me@
- @example.com
- me.@example.com
- .me@example.com
- me@example..com
- me.example@com
- me\@example.com
Ik heb het nu zo opgelost dat de escapes buiten quotes ook gewoon valideren, en de ASCII-leestekens buiten '!', '#', '$', '%', '&', '\'', '*', '+', '-', '/', '=', '.', '?', '^', '_', '`', '{', '|', '}' en '~' niet, dus die twee edge cases heb ik verwijderd. Maar wat is nou echt goed? Ik kom er met de RFC's toch ook niet helemaal uit, en teh interwebz is ook een beetje conflicterend wat betreft dat soort details.
iOS developer