Показать сообщение отдельно
Старый 03.06.2008, 22:08
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ого... кса, задача, хоть и банальная - небанальная, отнюдь (у меня есть, например, один почтовый ящик с которым вечно проблемы из-за грамотеев решивших, что в домейном имени низзя дефисы) =)
Во-первых: существует стандарт для е-маил аддрессов... но он очень много чего позволяет... например: "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'));
Не бог весть, но с пивом покатит =)
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 03.06.2008 в 23:06.