![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Соблюдение формата адреса электронной почты [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 наверно не слышал.
Сервер твой? Если нет то рассуждения насчет точки неверны