Co je validní e-mailová adresa?
Po napsání článku Regulární výraz pro kontrolu e-mailu by bylo asi dobré, abych trošku rozpitval ten kód, který byl v článku uveden.
Co je e-mailová adresa
Takže kód vychází z definice e-mailové adresy, tak jak je popsána v dokumentu RFC 822 (RFC 2822). Neovládám moc angličtinu (vlastně skoro vůbec), ale sem tam něčemu rozumím a podle zmíněného dokumentu se dá zjednodušeně říct, že e-mailová adresa se skládá ze tří částí:
- část před zavináčem
- zavináč
- část za zavináčem
Část před zavináčem
Tato část se může obsahovat jedno nebo více tzv. slov navzájem oddělených tečkou. Tečka se nesmí vyskytovat těsně před znakem zavináč a nesmí se opakovat vícekrát za sebou.
Kód pro kontrolu části před zavináčem je následující:
$regex = '^[-a-z0-9!#$%&'*+/=?^_<{|}~]+' .
'(.[-a-z0-9!#$%&'*+/=?^_<{|}~]+)*'
Slovem je myšlena souvislá sekvence povolených znaků (v případě části za zavináčem povolených znaků mimo speciální znaky).
Část za zavináčem
Tato část může obsahovat jedno nebo více slov navzájem oddělených tečkou. Tečka se nesmí vyskytovat těsně za znakem zavináč a nesmí se opakovat vícekrát za sebou. Nejsou povoleny speciální znaky (viz níže). Za poslední tečkou musí následovat slovo o délce minimálně dva znaky, které označuje adresu Top Level Domény (TLD).
Kód pro kontrolu části za zavináčem je následující:
'[a-z0-9-]+(.[a-z0-9-]{2,})+$';
Povolené znaky
Povolenými znaky jsou skoro všechny tisknutelné znaky, tedy písmena oabecedy A-Z, číslice 0-9 a pomlčka.
Speciální znaky
Speciální znaky jsou podskupinou povolených znaků a mohou být použity jen v části před zavináčem. Jedná se o následující znaky:
!#$%&'*+/=?^_<{|}~
Závěrem
Předpokládám, že řádek kódu s kontrolou zavináče není třeba popisovat. Řětězec je nutné kontrolovat pomocí funkce eregi, která nerozlišuje velikost písmen.
Nevýhodou řetězce je to, že nekontroluje existenci TLD, ale pouze délku posledního slova za poslední tečkou (což je sice chyba, ale zanedbatelná). Dalo by se to udělat tak, že by řetězec obsahoval seznam všech dostupných řetězců TLD, ale nevýhodou tohoto řešení by bylo to, že pokud by se seznam řetězců TLD změnil, musel by se změnit i kontrolní řetězec. Zjišťování změn v seznamu TLD je poměrně netriviální záležitostí a proto si myslím, že použité řešení je lepší (sice nepřesné, ale zato univerzální).
- Napsal: bobocop, 22.04.2005, 15:18:00
- Kategorie: Webdesign
- Trvalý odkaz
Komentáře
Přidání komentáře...
Archivy
- červenec 2011
- červen 2011
- květen 2011
- únor 2011
- červenec 2010
- červen 2010
- duben 2010
- březen 2010
- únor 2010
- leden 2010
- listopad 2009
- říjen 2009
- září 2009
- červen 2009
- březen 2009
- prosinec 2008
- listopad 2008
- říjen 2008
- srpen 2008
- červen 2008
- květen 2008
- duben 2008
- březen 2008
- únor 2008
- prosinec 2007
- listopad 2007
- září 2007
- červen 2007
- květen 2007
- duben 2007
- březen 2007
- leden 2007
- prosinec 2006
- říjen 2006
- září 2006
- srpen 2006
- červenec 2006
- červen 2006
- duben 2006
- březen 2006
- únor 2006
- leden 2006
- prosinec 2005
- listopad 2005
- říjen 2005
- září 2005
- srpen 2005
- červenec 2005
- červen 2005
- květen 2005
- duben 2005
- březen 2005
- únor 2005
- leden 2005
- prosinec 2004
- listopad 2004
- říjen 2004
- září 2004
- srpen 2004
- červenec 2004
- červen 2004
Odkazy
- Bohumír Bednařík
- Matějka Koupelny
- Škola pro výcvik vodicích psů pro nevidomé
- Veřejný weblog
- Montáže nábytku
Ostatní
Vyhledávání
Reklama