Vážení čtenáři, ačkoli jsem původně mínil napsat pouze dva díly o kontrole správnosti e-mailem v JavaScriptu, přišlo mi můj email mnoho zajímavých podnětů od čtenářů, a rád bych se s nimi podělil i s vámi.

Smí e-mailová adresa začínat tečkou?

Ve svých článcích jsem vyšel zejména ze svých zkušeností, které jsem přetlumočil do prvních dvou dílů. Dostal jsem se přitom do střetu v názorech na některá pravidla. Zejména diskutovaná byla část pravidla 5 o tom, zda může být tečka na začátku adresy, nebo ne.

Abych zachoval nestrannost, sáhl jsem přímo po normě, která specifikuje, jak má taková adresa vypadat. Je to dokument RFC 822, který je volně přístupný na mnoha místech na internetu. Dokument je z 13. srpna 1982, a byl později několikrát rozšířen v dalších dokumentech. Na konci je popsáno, jak se mají správně tvořit e-mailové adresy.

Podle dokumentu RFC 822 má obsahovat adresa v části před znakem @ libovolný počet slov oddělených tečkami, přičemž se musí začít slovem, nikoli tečkou. Každé slovo je buď řetězec v uvozovkách (který může obsahovat prakticky cokoli kromě znaku konce řádku), a nebo tzv. atom. Atom je slovo, které není v uvozovkách, a které nesmí obsahovat znaky ()<>@,;:\".[], dále nesmí obsahovat kontrolní znaky (veškeré znaky v ASII tabulce před mezerou, tedy s kódy 0 až 31, a potom také znak s ASCII hodnotou 127) a také nesmí obsahovat mezeru. Závěr tedy je, pokud jsem něco nepřehlédl, že adresa tečkou začínat nemůže.

Na druhé straně by část před znakem @ neměla být jakkoli interpretována před tím, než dojde na cílový poštovní server. Takže pokud umí cílový poštovní server zpracovat i nestandardní adresy, které ale nevyhovují normě, potom samozřejmě lze do něj dostat i e-mailové adresy, které začínají tečkou. Nicméně zaručeno to není, ačkoli asi většina serverů takové adresy bude přijímat.

Jaká písmena jsou v adrese dovolena?

Krátce po uveřejnění prvního dílu jsem dostal mail, jehož autorem byl pan Michal Ukropec. Upozorňoval mě na to, že nekontroluji, zda e-mailová adresa neobsahuje nepovolené znaky. Dodatečně jsem dostal i několik stručnějších mailů s podobnou připomínkou.

Velice za toto upozornění děkuji, protože mě toto pravidlo ani nenapadlo. Pokud se obrátím na normu RFC 822, zjistím, že tvar e-mailové adresy vypadá tak, že každá z obou částí, tedy část před a za znakem @ se skládá ze slov oddělených tečkami. Pokud je slovo uzavřeno v uvozovkách, může obsahovat cokoli kromě znaku konce řádku. Pokud není, je to tzv. atom, a znaky, které nesmí obsahovat jsou uvedeny o několik odstavců výše.

Pro kontrolu, zda se nepoužívají nepovolené znaky, je potřeba obě části rozdělit na slova. Pokud slovo není v uvozovkách, smí obsahovat pouze písmena, čísla, nebo znaky !#$%&’*+_/=?'{|}~ a žádné jiné. Pokud je v uvozovkách, smí obsahovat všechno kromě konce řádku. Je také potřeba v „zauvozovkovaném“ řetězci dávat pozor na některé speciální dvojznaky, jako třeba \" znamená uvozovku uvnitř slova.

Vlastní javaScriptový kód doplním v některém z příštích článků. Rád bych totiž použil regulární výrazy, a předtím přinesl jejich popis.

Regulární výrazy

Další, velice inspirující mail jsem dostal od pana Jana Malého. Poslal mi ukázku JavaScriptového kódu na kontrolu e-mailové adresy, která využívá regulární výrazy.

Regulární výrazy jsou velice mocným, a přitom jednoduchým prostředkem na prohledávání textů, nahrazování textů, apod., který vznikl v Unixu. Je obrovská škoda, že uživatelé Windows se s tímto prostředkem dostávají do styku jenom velice zřídka. Například programátoři mohou v produktech typu Delphi, nebo C++ Builder najít program grep, který slouží pro hledání textů v souborech podle regulárních výrazů. Unixoví uživatelé naopak nemohou regulární výrazy minout, protože se objevují v této platformě doslova na každém kroku. Je to proto, že první vývojáři Unixu vyvíjeli Unix pod záminkou vytvoření systému na snadné zpracování textů.

Regulární výrazy byly do JavaScriptu přidány ve verzi 1.2 a to jako objekt typu RegExp a také jako metoda search, u které je možné kontrolovat, zda text vyhovuje regulárnímu výrazu. Také jako metoda match pro zjištění, která podčást textu vyhovuje regulárnímu výrazu. Důsledkem používání regulárních výrazů je mnohem kratší kód v JavaScriptu, než pokud je nepoužijeme.

Nápad pana Malého mě tak nadchl, že jsem svou funkci zkontroluj mail přepsal do regulárních výrazů. Posuďte, jak je kraťoučká oproti původní verzi:

<script type="text/javascript" language="JavaScript1.2"><!–
function zkontroluj_email(adresa)
{
    re = /^[^.]+(\.[^.]+)*@([^.]+[.])+[a-z]{2,3}$/;
    return adresa.search(re) == 0;
}
// –>
</script>

Zároveň napíši, že takto napsaná funkce provádí všechny kontroly, co ta samá jmenovkyně popsaná ve druhém díle. Tady vidíte, že regulární výrazy jsou opravdu mocná zbraň, pro kterou není problém zkontrolovat v textu mnoho podmínek najednou. Později Interval.cz přinese jejich podrobnější popis.

Zároveň přínáším příklad stránky, která používá tuto funkci.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

3 Příspěvků v diskuzi

Odpovědět