Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.06.2008, 19:36
Ведьмак вне форума Посмотреть профиль Отправить личное сообщение для Ведьмак Посетить домашнюю страницу Ведьмак Найти все сообщения от Ведьмак
  № 1  
Ответить с цитированием
Ведьмак
[+1 22.07.07]
 
Аватар для Ведьмак

Регистрация: May 2007
Адрес: Минск, Беларусь
Сообщений: 347
Отправить сообщение для Ведьмак с помощью ICQ Отправить сообщение для Ведьмак с помощью Yahoo
По умолчанию Валидация e-mail в форме.

Господа, подскажите, как сделать нормлаьную развернутую проверку валидности ящика введенного в поле формы а AS2?

Проверить на точку, собаку, тире в начале, цифры в конце могу и сам ))

Заранее все спасибо..

Старый 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.
Старый 04.06.2008, 10:41
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 3  
Ответить с цитированием
qazwsx
Banned
[+5 15.02.09]
[++5 15.02.09]

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
Код:
function checkEmail (e) {
	var i, j, l = e.length;
	var foundPoint = false;

	function checkChars (s, i, l) {
		while (i < l && ("_-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789").indexOf(s.charAt(i)) != -1){
			i++;
		}
		return i;
	}
	function checkFirstLevelDomainChars (s, i, l) {
		while (i < l && ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").indexOf(s.charAt(i)) != -1) {
			i++;
		}
		return (i == l);
	}
	trace(e);

	// every email starts with a string
	if ((i=checkChars(e, 0, l)) == 0) {
		return -1;
	}
	//init j
	j=i;

	// followed by an arbitrary number of ("." string) combinations
	while (i < l && e.charAt(i) == ".") {
		// skip the point
		i++;
		// if there are no chars, we have an error
		if ((j=checkChars(e, i, l)) == i) {
			return -2;
		}
		// else skip the chars
		i = j;
	}
	// then follows the magic @
	if (e.charAt(i) != "@"){
		return -3;
	}

	// followed by minimum one string point string
	// after the last point minimum 2 characters are allowed

	do {
		// skip the @ (j == i at the beginning, so it is like i++)
		i = j+1;
		// do we have more chars ?
		j = checkChars(e, i, l);
		if (j == i) {
			// no more chars found -> error
			return -4;
		} else if (j == e.length) {
			// emailaddress is finished, do we have a first level domain ?
			j -= i;
			// we have one if it is at least 2 long and consists of the correct characters
			if(foundPoint && j>=2 && checkFirstLevelDomainChars(e, i, l)){
				return 1
			} else {
				return -5
			}
		}
		// if we reach the end or don't have a point, we return an error
		foundPoint = (e.charAt(j) == ".");
	} while (i < l && foundPoint);
	return -6;
}

Старый 04.06.2008, 14:14
Ведьмак вне форума Посмотреть профиль Отправить личное сообщение для Ведьмак Посетить домашнюю страницу Ведьмак Найти все сообщения от Ведьмак
  № 4  
Ответить с цитированием
Ведьмак
[+1 22.07.07]
 
Аватар для Ведьмак

Регистрация: May 2007
Адрес: Минск, Беларусь
Сообщений: 347
Отправить сообщение для Ведьмак с помощью ICQ Отправить сообщение для Ведьмак с помощью Yahoo
Ого ) Сейчас попробую..

2 wvxvw: с RegExp я уже пробовал возиться, но что-то так и не запустил его, решил, что он вобщем-то только с AS3 дружит..

2 qazwsx: немного запутался в вашем коде.. может подскажите, что функиция должна вернуть при удачной валидации и при неудачной?

Попробовал первый вариант...
2 wvxvw: валидирует такую ерунду вроде ewer@.qweqwe

второй вариант был тоже дырявый, привел его более менее рабочий вариант (если кому надо) :
Код:
function checkEmail(e) {
	var i, j, l = e.length;
	var foundPoint = false;

	function checkChars(s, i, l) {
		while (i<l && ("_-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789").indexOf(s.charAt(i)) != -1) {
			i++;
		}
		return i;
	}

	function checkFirstChars(s, i, l) {
		while (i<l && ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789").indexOf(s.charAt(i)) != -1) {
			i++;
		}
		return i;
	}
	function checkFirstLevelDomainChars(s, i, l) {
		while (i<l && ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").indexOf(s.charAt(i)) != -1) {
			i++;
		}
		return (i == l);
	}
	trace(e);

	// every email starts with a string
	if ((i=checkFirstChars(e, 0, l)) == 0) {
		return -1;
	}
	//init j   
	j = i;

	// followed by an arbitrary number of ("." string) combinations
	while (i<l && e.charAt(i) == ".") {
		// skip the point
		i++;
		// if there are no chars, we have an error
		if ((j=checkChars(e, i, l)) == i) {
			return -2;
		}
		// else skip the chars   
		i = j;
	}
	// then follows the magic @
	if (e.charAt(i) != "@") {
		return -3;
	}
	if (e.charAt(i+2) == ".") {
		return -3;
	}
	// followed by minimum one string point string   
	// after the last point minimum 2 characters are allowed

	do {
		// skip the @ (j == i at the beginning, so it is like i++)
		i = j+1;
		// do we have more chars ?
		j = checkChars(e, i, l);
		if (j == i) {
			// no more chars found -> error
			return -4;
		} else if (j == e.length) {
			// emailaddress is finished, do we have a first level domain ?
			j -= i;
			// we have one if it is at least 2 long and consists of the correct characters
			if (foundPoint && j>=2 && checkFirstLevelDomainChars(e, i, l) && j<=5) {
				return 1;
			} else {
				return -5;
			}
		}
		// if we reach the end or don't have a point, we return an error   
		foundPoint = (e.charAt(j) == ".");
	} while (i<l && foundPoint);
	return -6;
}
trace(checkEmail('ewer878@ss.com'));


Последний раз редактировалось Ведьмак; 04.06.2008 в 18:37.
Старый 04.06.2008, 19:47
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
только indeхOf() очень медленная...
http://www.jurjans.lv/flash/RegExp.html вот отсюда можно взять regEхp для АС2.
Собственно, в моем варианте нужно было всего 1 строчку добавить =)
Код:
function validateEmail(s:String):Boolean {
	if(s.indexOf('..')>=0) return false;
	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'));
Вот, добавил еще тест, если интересно =)
Код:
function checkEmail(e) {
	var i, j, l = e.length;
	var foundPoint = false;

	function checkChars(s, i, l) {
		while (i<l && ("_-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789").indexOf(s.charAt(i)) != -1) {
			i++;
		}
		return i;
	}

	function checkFirstChars(s, i, l) {
		while (i<l && ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789").indexOf(s.charAt(i)) != -1) {
			i++;
		}
		return i;
	}
	function checkFirstLevelDomainChars(s, i, l) {
		while (i<l && ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").indexOf(s.charAt(i)) != -1) {
			i++;
		}
		return (i == l);
	}
	//trace(e);

	// every email starts with a string
	if ((i=checkFirstChars(e, 0, l)) == 0) {
		return -1;
	}
	//init j   
	j = i;

	// followed by an arbitrary number of ("." string) combinations
	while (i<l && e.charAt(i) == ".") {
		// skip the point
		i++;
		// if there are no chars, we have an error
		if ((j=checkChars(e, i, l)) == i) {
			return -2;
		}
		// else skip the chars   
		i = j;
	}
	// then follows the magic @
	if (e.charAt(i) != "@") {
		return -3;
	}
	if (e.charAt(i+2) == ".") {
		return -3;
	}
	// followed by minimum one string point string   
	// after the last point minimum 2 characters are allowed

	do {
		// skip the @ (j == i at the beginning, so it is like i++)
		i = j+1;
		// do we have more chars ?
		j = checkChars(e, i, l);
		if (j == i) {
			// no more chars found -> error
			return -4;
		} else if (j == e.length) {
			// emailaddress is finished, do we have a first level domain ?
			j -= i;
			// we have one if it is at least 2 long and consists of the correct characters
			if (foundPoint && j>=2 && checkFirstLevelDomainChars(e, i, l) && j<=5) {
				return 1;
			} else {
				return -5;
			}
		}
		// if we reach the end or don't have a point, we return an error   
		foundPoint = (e.charAt(j) == ".");
	} while (i<l && foundPoint);
	return -6;
}
//
function validateEmail(s:String):Boolean {
	if(s.indexOf('..')>=0) return false;
	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;
}
var eMails:Array = [];
function generateEmails():Void {
	var randChar:String = '';
	var emailLength:Number = 16;
	while(emailLength) {
		randChar += String.fromCharCode(Math.round(Math.random()*126));
		emailLength--;
	}
	eMails.push(randChar);
}
for(var t:Number=0; t<1000; t++){
	generateEmails();
}
var time:Number = getTimer();
for(var i:Number=0; i<1000; i++){
	validateEmail(eMails[i])
}
trace('validateEmail validated 1000 e-mails within '+(getTimer() - time)+' ms');
var time:Number = getTimer();
for(var j:Number=0; j<1000; j++){
	checkEmail(eMails[i])
}
trace('checkEmail validated 1000 e-mails within '+(getTimer() - time)+' ms');
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 04.06.2008 в 20:40.
Старый 04.06.2008, 20:55
Ведьмак вне форума Посмотреть профиль Отправить личное сообщение для Ведьмак Посетить домашнюю страницу Ведьмак Найти все сообщения от Ведьмак
  № 6  
Ответить с цитированием
Ведьмак
[+1 22.07.07]
 
Аватар для Ведьмак

Регистрация: May 2007
Адрес: Минск, Беларусь
Сообщений: 347
Отправить сообщение для Ведьмак с помощью ICQ Отправить сообщение для Ведьмак с помощью Yahoo
2 wvxvw: не совсем одну )
- пропускает если домен второго уровня 1 буква
- пропускает если в домене первого уровня цифры и тире
- пропускет если домен первого уровня из одной буквы

))

вобщем, RegExp рулит ))

Старый 04.06.2008, 21:00
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
А что, разве нельзя? =/
по спецификации еще и не такое можно вроде... =)
по крайней мере я знаю один домейн из одной буквы =)
http://www.d.co.il/
это желтые страницы наши... я верю что и почта у них с одной буквой...

Ну и злая шутка напоследок =)
Код:
var validateEmail:RegExp = /^[\x21 | \x23-\x27 | \x2A | \x2B | \x2D | \x2F | \x30-\x39 | \x3D | \x3F | \x41-\x5A | \x5E | \x5F | \x60-\x7E] [\x21 | \x23-\x27 | \x2A | \x2B | \x2D | \x2F | \x30-\x39 | \x3D | \x3F | \x41-\x5A | \x5E | \x5F | \x60-\x7E |(\.{1})]{1,64}? @ [\w|\d|\-]{2,}\.[\w{3}$ | \w{2}(\.\w{2}*)$]{2,}/x;
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 04.06.2008 в 21:05.
Создать новую тему Ответ Часовой пояс GMT +4, время: 07:21.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 07:21.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.