Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Соблюдение формата адреса электронной почты [D7, WinXP]


AndrewLi ©   (2005-10-09 18:38:00) 

Занят я тем, что пишу алгоритм для адреса электронной почты. Нужно, чтобы были применены правила написания

адреса. Ограничение на допустимые символы сформировал
(
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key>='a') and (Key<='z') or (Key>='A') and (Key<='Z') or (Key='@') or (Key='.') or (Key>='0') and

(Key<='9')
then Edit1.ReadOnly:=False
else Edit1.ReadOnly:=True
end;
)
, разве, что кроме '_'.

Теперь вот занят обработкой последовательности записи элементов адреса и количеством допустимых символов
1) имя@сервер.зона
2) '.' может быть записана только после '@'
3) '@','.' могут быть записаны только один раз
4) до и после '@' и '.' обязательно должен присутствовать хотя бы один символ, а между '@' и '.' хотябы один
5) адресс должен быть записан на английском языке, а это значит, что, например переключась на русский язык

вполне можно написать и '.' (ведь у '.', что на русском и на английском языке код 46, поэтому фильтрация клавиш

по их коду не допустима). Допустим только английский.

Если заниматься проверкой правильности записи адреса
1) в режиме ввода, то
1.1) Возможно сделать переменную скажем, типа Boolean, чтобы, после ввода, например '@' присваивать True, и

после запретить ввод '@'
1.2) Или перехватывать сообщения Windows о нажатии клавиш. Там есть фиксатор количества нажатия клавиши.

Возможно сделать допуск до одного нажатия на '@' и '.'
2) или уже после записи.
2.1) тогда нужно будет перебирать строку, а значит формировать файл. И к тому же, как-то не корректно будет не

направлять правильность записи адреса в процессе


Anatoly Podgoretsky   (2005-10-10 20:12:00) [1]

AndrewLi ©   (10.10.05 18:18) [8]
Почему же пункт №2 неверен. Ведь, если по порядку, то вначале пишется '@', а уж после '.'-ки.

Это не так и более того, точка не обязательна вообще.

А в пункте №3, да , оказался неправ, насчет '.', но '@' ведь записывается один раз. Да, насамом деле я недобрал до количества символов '.' Их может быть более одного

Неверно потому что смешал два разных условия в одном пункте и сторое условие неверное.

Можно ли, запретить переключение на другой язык. Нужно, чтобы принимался английский?

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


Fay   (2005-10-10 19:35:00) [2]

2 AndrewLi ©   (10.10.05 18:18) [8]
>> но '@' ведь записывается один раз.
Понимать следует как "про пункт третий нельзя сказать, что он полностью верен" ...


GuAV   (2005-10-10 18:22:00) [3]


> Ведь, если по порядку, то вначале пишется '@', а уж
> после '.'-ки.

Не обязательно, при создании ящика можно указать логин с точками.


AndrewLi   (2005-10-10 18:18:00) [4]

Вот спасибо всем за ответы. Помогли.

Почему же пункт №2 неверен. Ведь, если по порядку, то вначале пишется '@', а уж после '.'-ки. А в пункте №3, да , оказался неправ, насчет '.', но '@' ведь записывается один раз. Да, насамом деле я недобрал до количества символов '.' Их может быть более одного

Вот спасибо за RegExpr, все становится понятно. О множествах слышал, но как-то сложновато получается

Можно ли, запретить переключение на другой язык. Нужно, чтобы принимался английский?

Хотелось бы, но к сожалению не обработка спама.


easy   (2005-10-09 20:52:00) [5]

регулярное выражение для определения правильности e-mail -
([\w_-]+(\.[\w_-]+)*@[\w_-]+(\.[\w_-]+)+)

на PHP -

function is_email($mail){
return preg_match("/([\w_-]+(\.[\w_-]+)*@[\w_-]+(\.[\w_-]+)+)/",$mail);
}


с использованием [3] -

uses
RegExpr;

function is_mail(const mail: string): boolean;
begin
 Result := false;
 with TRegExpr.Create do try
   Expression := '([\w_-]+(\.[\w_-]+)*@[\w_-]+(\.[\w_-]+)+)';
   Result := Exec(mail) and (MatchLen[1]=Length(mail));
 finally
   Free;
 end;
end;


SergP.   (2005-10-09 20:23:00) [6]

Точек может быть сколько угодно.
Например в моем мыле (провайдерском) их аж целых 3

типа
xxx@xxx.xx.xxxxxx.xxx


> Занят я тем, что пишу алгоритм для адреса электронной почты.


Это случайно не обработки спам-листов? :-)


Fay   (2005-10-09 20:16:00) [7]

2 Anatoly Podgoretsky ©   (09.10.05 20:11) [4]
согласен, они верны в той же мере


Anatoly Podgoretsky   (2005-10-09 20:11:00) [8]

Fay ©   (09.10.05 19:14) [2]
А если подумать то и пункты 4 и 5


junior   (2005-10-09 19:29:00) [9]

используй  регулярные выражения, например:
http://regexpstudio.com/TRegExpr/TRegExpr.html


Fay   (2005-10-09 19:14:00) [10]

Пункты 2 и 3 неверны


Anatoly Podgoretsky   (2005-10-09 18:45:00) [11]

Про множества и операто IN наверно не слышал.
Сервер твой? Если нет то рассуждения насчет точки неверны


Наверх

Титульная страница Поиск, карта сайта Написать письмо