Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проверка адреса e-mail на валидность. (http://www.flasher.ru/forum/showthread.php?t=146148)

goldlider 29.10.2010 22:17

Проверка адреса e-mail на валидность.
 
Имеется такая задача:
В переменную email мы присваиваем какой-нить адрес, к примеру (example@timon.com).
Нужно проверить введенный адрес правильно введен, т.е. в адресе должны отсутствовать повторяющийся символ @, повторяющиеся точки, символ @ не должен присутствовать первым или последним, но хотя бы должна присутствовать одна точка и одна собачка.
Недопустимые записи (@example.timon.com, example.timon.com@, exa@mple@.timon.com, example..timon.com).
Все это нужно реализовать с помощью цикла while. С помощью других циклов не нужно.

Вот что у меня получилось, хотя многое неверно:
Код AS3:

var i = 0;
var signEmail:Boolean;
var email = "example@timon.com"
 
while (i < email.length)
{
        if (email.charAt(0) == "@" || email.charAt((email.length)-1) == "@" || (email.charAt(i) == "@" && email.charAt(i+1) == "@") || (email.charAt(i) == "." && email.charAt(i+1)) == "." || sobachka.charAt(i) != "@" || sobachka.charAt(i) != "." )
        {
                signEmail = false;
                trace("Проверьте корректен ли ввод !");
                break;
        }
        else
        {
                signEmail = true;
                trace("Вы правильно набрали 8)");
        }
        i++;
}


GBee 29.10.2010 22:24

/(\w|[_.\-])+@((\w|-)+\.)+\w{2,4}+/

udaaff 29.10.2010 22:26

Проверки такого рода производятся с помощью регулярных выражений. Были уже темы на счет имейла на валидность на форуме. Гугл также в помощь.

goldlider 29.10.2010 22:27

Цитата:

Сообщение от GBee (Сообщение 946488)
/(\w|[_.\-])+@((\w|-)+\.)+\w{2,4}+/

что это ? Че то я не понял.

Добавлено через 3 минуты
Цитата:

Сообщение от udaaff (Сообщение 946491)
Проверки такого рода производятся с помощью регулярных выражений. Были уже темы на счет имейла на валидность на форуме. Гугл также в помощь.

Да мне не нужны регулярные выражения. Сейчас читаю книгу Колина Мука - ActionScript 3.0.
Так там на стр. 92 есть упражнение. Там ничего насчет регулярных выражений сказано не было.

t4arty 29.10.2010 22:37

есть у типа String метод indexof, он проверяет если в строке символ(ы).

(Вроде метод тот)

goldlider 29.10.2010 22:41

Цитата:

Сообщение от t4arty (Сообщение 946497)
есть у типа String метод indexof, он проверяет если в строке символ(ы).

(Вроде метод тот)

Нет не подходит. Нужно с помощью charAt.

Добавлено через 45 минут
Может у кого-нибудь есть идеи ??

Mur4ik 29.10.2010 23:55

goldlider, Вам уже дали идею в одну строку вместо 20.

Вы боитесь регулярных выражений? То что Колин Мук по своим соображениям в том упражнении этого не показал, совсем не значит что остальные решения не верны.

Код AS3:

var userMail:String = "s0me.us_er@mail256a.wtf";
 
// вариант 1
function isValidEmail(email:String):Boolean
{
        var pattern:RegExp = /^[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}$/i;
        return email.match(pattern) != null;
}
 
if ( isValidEmail(userMail) ) trace("1. верный");
else trace("1. не верный");
 
// вариант 2
if ( /^[a-z0-9][-._a-z0-9]*@([a-z0-9][-_a-z0-9]*\.)+[a-z]{2,6}$/.test(userMail) ) trace("2. верный");
else trace("2. не верный");

Хотите иной способ, попробуйте с помощью методов класса String учесть все возможные варианты и ужаснитесь от того во что это выльется.

Когда то натыкался типа на идеальное РВ, длина и вид впечатлили. :)

goldlider 30.10.2010 00:51

Mur4ik сам уже нашел решение. Я просто, забыл добавить в условие, что задача должна только лишь с помощью цикла while, условия if и метода charAt.
Правда код большой. Но самое главное работает.

Код AS3:

var i = 0;
var j = 0;
var k = 0;
var signEmail:Boolean;
var email = "example@timon.com"
 
while (i < email.length)
{
        if (email.charAt(0) == "@" || email.charAt((email.length)-1) == "@" || email.charAt(0) == "." || email.charAt((email.length)-1) == ".")
        {
                signEmail = false;
                trace("Проверьте корректен ли ввод !");
                break;
        }
        else if (email.charAt(i) == "@")
        {
                j++;
                if (j == 2)
                {
                    signEmail = false;
                          trace("Более одного @ недопустимо");
                          break;
                }
 
        }
        else if (email.charAt(i) == ".")
        {
                k++;
                if (k == 2)
                {
                        signEmail = false;
                        trace("Более одного . недопустимо")
                        break;
                }
        }
        i++;
}
 
if (j == 0)
{
        signEmail = false;
        trace("Введите хотя бы один @");
}
else if (k == 0)
{
        signEmail = false;
        trace("Введите хотя бы один .");
}
else
{
        trace("Введенный вами адрес правильный")
}


Bgg 30.10.2010 01:36

goldlider, вы извращенец.

t4arty 30.10.2010 03:17

теже яйца, только вид сбоку. ;(

easy.proger 30.10.2010 09:23

интересно, а что не кто не заметил, что у автора вот такой email будет не валидный - easy.proger@mymailserver.ru ? то есть две точки в email

i.o. 30.10.2010 09:48

лучший способ проверки - отправить письмо и подождать, не вернется ли обратно :))

cleptoman 30.10.2010 09:56

еще (для коллекции вариантов) есть бородатый способ - 2 раза split (на "@" и на ".") с соотв. проверками

Mur4ik 30.10.2010 13:16

Мдя, код не такой то и большой как мог бы быть.
Но в любом случае такой код пропустит кучу невалидных емейлов.
Плюс нет проверки на недопустимые символы. Если это какая то лабораторная работа или домашнее задание, то еще куда ни шло (на троечку). Если же это случай для реального проекта, то он просто не имеет права на жизнь.

Хомяк 30.10.2010 13:40

goldlider. В книге К.Мука вы встретили задание: сделать то то и то то с помощью лишь методов тех то и тех то. И зачем, спрашивается, грузить форум вопросом не только не имеющим отношения к практике, но и заданным вам с целью самостоятельного поиска решения?

wvxvw 30.10.2010 14:24

Нет, нельзя сделать нормально валидацию е-мейла одним регулярным выражением. По частям - можно. Кроме того есть "уровни правильности", вот, например, кто-то предлагал искать точку в строке, а она там может и не быть (admin@localhost - вполне себе валидный адресс), кроме того "foo bar"@domain тоже валидный адресс и т.п. вот только встречаются такие редко или в специфических ситуациях.

Jewelz 30.10.2010 14:56

используйте as3DataValidation от Adobe

goldlider 30.10.2010 17:01

Цитата:

Сообщение от Mur4ik (Сообщение 946597)
Мдя, код не такой то и большой как мог бы быть.
Но в любом случае такой код пропустит кучу невалидных емейлов.
Плюс нет проверки на недопустимые символы. Если это какая то лабораторная работа или домашнее задание, то еще куда ни шло (на троечку). Если же это случай для реального проекта, то он просто не имеет права на жизнь.

А никто не говорил, что это какой-то проект. Простое домашнее упражнение.


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

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