Validace mailAdresy

Začal jsem se vrtat v regulárních výrazech a udělal si validaci inputu pro emailovou adresu. Pokud někdo znáte přesná syntaktická pravidla, pomozte mi dovést RegExp k dokonalosti. Zatím mám uděláno takto:
Povolené znaky anglická abeceda, číslice, podtržítko _, pomlčka -.
Začínat smí jen písmenem nebo číslicí.
Jediný povinný zavináč. Před ním i za ním libovolný počet neosamocených teček (tedy uvnitř ostatních povolených znaků a jen po jedné), tečka nesmí být vedle zavináče. Část před zavináčem tečku obsahovat nemusí, část za ním musí obsahovat alespoň jednu tečku, za kterou jsou povinně dvě nebo tři písmena a-z jako poslední znaky.
Díky za nápovědy i odkazy, hodím to pak na cscript.wz.cz.
<?php
if (eregi("^[a-z0-9\.\-_]{1,}@[a-z0-9\.\-_]{1,}\.[a-z]{2,3}",$HTTP_POST_VARS[email])
and eregi("^[a-z0-9]",$HTTP_POST_VARS[email])
and !eregi("\.{2}",$HTTP_POST_VARS[email])
and !eregi("\.@",$HTTP_POST_VARS[email])
and !eregi("@\.",$HTTP_POST_VARS[email])
){
echo "Spravny e-mail";
}else{
echo "Spatny e-mail";
}
?>
Zdar Ondro!

Dík za help. Přiznám se, že mi šlo spíš o verbální sdělení co se týče povolených znaků, hlavně jestli smí být pomlčka a podtržítko na začátku. Jsem hračička a nechtěl jsem k výsledku přijít snadno zadarmo bez zapnutí mozku. :o))
Zatím jsem stvořil
re = /^[\w]{1}(\.?[\w-]){0,}\@([\w-]\.?){1,}\.[a-z]{2,3}$/i ; // \w zahrnuje totiž a-z0-9_
takže pomlčku na začátku tímto zatím zavrhuji.
Díky.
Zdeněk
V EReg to de takhle: "^[[:alnum:]][-[:alnum:]_.]*@[-[:alnum:]_.]*\.[[:alpha:]]{2,3}"

V grepovi: "^[[:alnum:]][-[:alnum:]_.]*@[-[:alnum:]_.]*\.[[:alpha:]]\{2,3\}"

Doufam, ze sem zahrnul fsechno.....
Dík. Jen si tak ze zájmu hraju v JavaScriptu. Jak tak koukám, tak nejen VBScript, ale i jiní jazykové používají velmi podobnou syntaxi. Znám dobře FoxPro, kde je to výrazně jednodušší, ba až blbuvzdorné.
Na svých stránkách validuji mailAdresu dost otrocky. Když jsem na Ecma našel regExp, tak jsem se nadchnul a první jsem hned šel testovat svoji chápavost na mailAdrese, kde se to prakticky rychle využije.
Takže to, co chci vlastně stvořit jako slovní formulaci, je: (rekapitulace mé chápavosti:-)
1. začíná písmenem nebo číslicí
2. pokračuje znaky z množiny (písmena, číslice, podtržítka, pomlčky) celistvý nezáporný početkrát nebo jedinou tečkou
3. ad 2 libovolněkrát s povolenou jedinou tečkou tak, aby celkem teček vedle sebe bylo 0 nebo 1
4. nekončí tečkou a pak je celkem jediný povinný zavináč
5. pokračuje stejně jako ad 3
6. totální závěr je povinná tečka a povinná 2 nebo 3 písmena (/*z konečné jen existující množiny*/)
Sládčik.
Snad jsem se vykydal dokonale. :o))
Ahoj
Zdeněk
Mno adresa typu "_user...@subdomain.domain.org" neni platna adresa? Ja sem to napsal, tag jag sem to pochopil, ale spis bych mail vubec neoveroval nebo overoval tag, ze tam musi bejt zavinac a za nim tecka a mezi tim naky znaky a na konci este ta pripona, ale myslim, ze se tam muzou vyskytovat ruzny blbosti.... Nefim presne jag to je, ale ze nekery freemaily nepodporujou nekery znaky v mailu je spis proto, aby to bylo jednodussi... Jinag hledal bych na google, urcite neco najdes, jag ma vypadat adresa...
Myslím, že univerzální předpis ani neexistuje, a že si to každý server dělá po svém. Za spolehlivé se snad dá považovat, že není mezera, je jeden zavináč ne na kraji, a na konci aspoň znak plus tečka plus dva až tři znaky. A dost. Dokonce jsem viděl i adresy s "á" a "ý".
Zdeněk
Teoreticky v adrese pred zavinacem muze bejt cokoliv, krome zavinace a mozna este neceho a za zavinacem musi bejt proste adresa zanesena v DNS, aby se ten mail mel kam dorucit... Tagze platna adresa by byla napr. root@62.245.64.163 , gdybych mel pustenej mailserver.... Jinak proc to vlastne overovat? Dyt uzivatel neni blbej, gdyz mu napises neplatna adresa, zada nakou vymyslenou, ktera ale vlastne bude podle pravidel platna... Nejlepsi by bylo asi pripojit se na dany server a zjistit, jestli tato schranka/server existuje....
No ba. Tagže fpodstatě závěr z validace zní: NAHOVNO. (Bez .cz na konci.) Něco na způsob mého skriptu na mých stránkách if(změna){nahovno}else{takynahovno} //nahovno==takynahovno
Dyk sem povídal, jenom si tak hraju. Přijde to levněji jak chlast a neblbne se tolik střemhlav. :o)
Zdeněk
:-) Mno chapu, ale proste bych zkousel overovat jaxi neco jinyho, treba vypsat fsechny interpunkcni znaminka z vety, nebo treba overovat platnost HTML (neco jako validator) :-)
taky zapominate na to, ze existuje domena I. radu .info , cili adresa muze koncit teckou a ctyrmi znaky.