Базовая проверка электронной почты в сценарии Inno Setup

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

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

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

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

Есть другие предложения?


person Charles    schedule 04.01.2010    source источник


Ответы (1)


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

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;

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

person Charles    schedule 04.01.2010