3

我想在 Inno Setup 脚本中进行基本的字符串验证,以相对确定该字符串是一个电子邮件地址。我只是想看看有一个'@'字符后跟一个'。' 字符,并且在这些字符的任一侧至少有一个字符。类似于这个正则表达式的东西:

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

object pascal 中缺少正则表达式和有限的字符串函数让我很伤心。反转字符串很简单,找到第一个'。' 和 '@' 然后进行一些比较,但是没有可用的 Reverse(string) 函数。

我知道我可以从我编写的帮助 DLL 中调用导出的函数,但我希望避免这种解决方案。

还有其他建议吗?

4

1 回答 1

7

一个很好的问题!请允许我提出一个答案...

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,它有一个 '@' 后跟一个 '.',并且在 '@' 和 '.' 的任一侧至少有一个字符。足够接近政府工作。

于 2010-01-04T20:21:29.277 回答