Ого... кса, задача, хоть и банальная - небанальная, отнюдь (у меня есть, например, один почтовый ящик с которым вечно проблемы из-за грамотеев решивших, что в домейном имени низзя дефисы) =)
Во-первых: существует стандарт для е-маил аддрессов... но он очень много чего позволяет... например: "My e{$}mail"@a-b по стандарту - валидный аддресс =) Но подавляющее большинство почтовиков ессно не разрешат зарегистрировать такое чудо =) А вообще, есть имплементация RegEхp класса для АС2... можно погуглить на эту тему, ну а дальше - уже как бог на душу положит...
*да, я как-то использовал, в ней были какие-то баги связанные с большим количеством бекслешей и еще какие-то, но, вобщем, вполне терпимо* =)
Или если не хочется его искать - я бы делал как-нибудь через charCodeAt();

Код:
function validateEmail(s:String):Boolean {
if(s.indexOf('..')>=0) return false;
var sl:Number = s.length;
var i:Number = 0;
var ss:Number;
var isLocalName:Boolean = true;
var domainName:Boolean = false;
var domainZone1:Boolean = false;
var domainZone2:Boolean = false;
var hasDomainName:Boolean = false;
var hasDomainZone:Boolean = false;
while (i < sl) {
ss = s.charCodeAt(i);
//trace(ss);
switch (ss) {
case -1:
case 33:
case 34:
case 35:
case 36:
case 38:
case 39:
case 40:
case 41:
case 42:
case 43:
case 47:
case 58:
case 59:
case 60:
case 61:
case 62:
case 63:
case 91:
case 92:
case 93:
case 123:
case 124:
case 125:
return false;
case 64:
if (!isLocalName || !i) return false;
isLocalName = false;
hasDomainName = true;
domainName = true;
break;
case 45:
if (!i) return false;
break;
case 46:
if (!i) return false;
if (isLocalName) break;
if (domainName) {
domainName = false;
hasDomainZone = true;
domainZone1 = true;
} else if (domainZone1) {
domainZone1 = false;
domainZone2 = true;
} else {
return false;
}
break;
default:
if (ss > 47 && ss < 122) {
break;
} else {
return false;
}
}
i++;
}
if(hasDomainName && hasDomainZone) return true;
return false;
}
trace(validateEmail('abc.d12-3@hotmail.com'));
Не бог весть, но с пивом покатит =)