Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2011, 16:33   #1
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию Контроль синтаксиса e-mail

Интересует простой способ контроля синтаксиса e-mail адреса. Проверка существования адреса не нужна, только синтаксис. Нашел в форуме VFP такой пример:
Код:
RegExp = CreateObject("VBScript.RegExp") 
RegExp.pattern = "\w+\@[.\w]+" 
? RegExp.Test("user@mail.ru" )
Насколько понял тестируется адрес user@mail.ru и результат на экран. В дельфях нечто подобное можно сообразить?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.06.2011, 16:45   #2
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

Код:
function IsValidEmail(const Value:string):boolean;
  function CheckAllowed(const s:string):boolean;
  var
    i: integer;
  begin
    Result:= false;
    for i:= 1 to Length(s) do
    begin
{ недопустимый символ в s - значит недопустимый адрес } 
      if not (s[i] in ['a'..'z', 'A'..'Z', '0'..'9', '_', '-', '.']) then
        Exit;
    end;
    Result:= true;
  end;
var
  i: integer;
  namePart, serverPart: string;
begin // начало выполнения isvalidemail 
  Result:= false;
  i:= Pos('@', Value);
  if i = 0 then
    Exit;
  namePart:= Copy(Value, 1, i - 1);
  serverPart:= Copy(Value, i + 1, Length(Value));//не указано имя или сервер
  if (Length(namePart) = 0) or ((Length(serverPart) < 5)) then
    Exit;
  i:= Pos('.', serverPart);
// должно иметь точку и как минимум три знака от конца 
  if (i = 0) or (i > (Length(serverPart) - 2)) then
    Exit;
  Result:= CheckAllowed(namePart) and CheckAllowed(serverPart);
end;

Последний раз редактировалось ZvEr_HaCkEr; 12.06.2011 в 16:48.
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 12.06.2011, 16:52   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну допустим адрес user_name@i.ua этот тест посчитает ошибочным, хотя почтовик i.ua существует, можете не сомневаться. Такой тест нет проблем сделать, просто я не совсем уверен в перечне допустимых символов в адресе. Могут ли быть точки в левой части адреса И сколько их может быть в правой?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 12.06.2011 в 16:58.
Аватар вне форума Ответить с цитированием
Старый 12.06.2011, 17:09   #4
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

Могут ли быть точки в левой части адреса
Да, но их должно быть не более одной
сколько их может быть в правой?
Любое количество, ибо существуют такие почтовики, которые содержат в имени не понятно что.
Цитата:
@p23.f82.n5030.z2.fidonet.org

Последний раз редактировалось ZvEr_HaCkEr; 12.06.2011 в 17:15.
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 12.06.2011, 17:26   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

ZvEr_HaCkEr спасибо за инфу А в самой винде нет какой либо функции тестирования? В примере из VFP используется тестирование с помощью регулярного выражения, нашел пример "более корректного" регулярного выражения и челюсть отвисла. Есть ли смысл с этим связываться?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.06.2011, 17:44   #6
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

Насчет функции в винде не знаю, но в инете полны инфы по этому поводу. Надо будет лишь взять готовое и пристроить под себя. Например вот. А пытаться разбираться в регулярных выражениях себе дороже, только убьете драгоценное время, которое можно потратить на улучшение программы.

Последний раз редактировалось ZvEr_HaCkEr; 12.06.2011 в 17:47.
ZvEr_HaCkEr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсветка синтаксиса Whiteweider Общие вопросы Delphi 5 04.12.2010 20:54
Ошибка синтаксиса Santosh Microsoft Office Access 2 18.08.2010 00:15
Подсветка синтаксиса Яр|/||< (^_^) Компоненты Delphi 5 15.02.2010 15:44
Подсветка синтаксиса Simply-Art Общие вопросы Delphi 2 29.05.2007 16:22