我正在使用Inno Setup,并且想要检查Pascal脚本,如果字符串变量是整数(仅0-9,没有十六进制)。我做了这个功能:
function IsInt(s: string): boolean;
var
i, len: Integer;
begin
len := length(s);
if len = 0 then
result := false
else
begin
result := true;
for i := 1 to len do
begin
if not (s[i] in ['0'..'9']) then !!! ERROR HERE !!!
begin
result := false;
exit;
end;
end;
end;
end;
但是编译器引发了一个错误:
Closing square bracket (']') expected.
如何解决?
如果我将行更改为:
if not (s[i] in ['0','1','2','3','4','5','6','7','8','9']) then
它符合但如果代码被执行则会出现此错误:
Runtime Error - Invalid Type.
怎么办?
答案 0 :(得分:3)
不是使用集合,而是可以进行简单的范围测试,例如
IF (s[i] < '0') OR (s[i] > '9') THEN
...
答案 1 :(得分:2)
来自Pascal脚本文档
原型:函数StrToIntDef(s:string; def:Longint):Longint;
描述:StrToInt函数转换在S中传递的字符串 变成一个数字。如果S不代表有效数字,则为StrToInt 返回Def。
中传递的数字
所以将def设置为-1,如果你的字符串不是数字,它将返回-1。