Базовая проверка электронной почты в скрипте Inno Setup - PullRequest
2 голосов
/ 04 января 2010

Я хочу выполнить базовую проверку строки в скрипте Inno Setup, чтобы быть уверенным, что строка является адресом электронной почты. Я просто хочу увидеть, что есть символ «@», за которым следует «.» характер и что есть по крайней мере один символ по обе стороны от них. Нечто похожее на это регулярное выражение:

[^@]+@.+\.[^\.]

Отсутствие регулярных выражений и ограниченных строковых функций в объектном паскале вызывает у меня горе. Было бы достаточно просто перевернуть строку, найти первое «.» и '@', а затем выполнить некоторые сравнения, но функции Reverse (string) нет.

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

Любые другие предложения?

1 Ответ

6 голосов
/ 04 января 2010

Отличный вопрос! Позвольте мне предложить ответ ...

function ValidateEmail(strEmail : String) : boolean;
var
    strTemp  : String;
    nSpace   : Integer;
    nAt      : Integer;
    nDot     : Integer;
begin
    strEmail := Trim(strEmail);
    nSpace := Pos(' ', strEmail);
    nAt := Pos('@', strEmail);
    strTemp := Copy(strEmail, nAt + 1, Length(strEmail) - nAt + 1);
    nDot := Pos('.', strTemp) + nAt;
    Result := ((nSpace = 0) and (1 < nAt) and (nAt + 1 < nDot) and (nDot < Length(strEmail)));
end;

Эта функция возвращает true, если в адресе электронной почты нет пробелов, у нее есть «@», за которым следует «.», И по крайней мере один символ находится по обе стороны от «@» и «.». Достаточно близко для работы правительства.

...