有没有函数可检查用户输入的数字是否合法? ( 积分: 10 )

  • 主题发起人 主题发起人 LinSM
  • 开始时间 开始时间
L

LinSM

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,
多谢指教!
 
如题,
多谢指教!
 
你就控制它,不合法的不让输入嘛。
 
onKeyPress
if not (key in ['0'..'9']) then key:=#0;
 
var
S: string;
i: integer;
code: integer;
begin
S:= '123';
Val(S,i,code)
// code = 0
S:= '12345asd';
Val(S,i,code)
// code = 6
end;
 
这样更好,要脱离IDE运行测试
try
strtoint();
....//字符转换函数
strtofloat();
except
end;
 
有小数点,pos函数为查找'.'是否在edit1中,有就输出位置,没有输出0
procedure TForm1.Edit1KeyPress(Sender: TObject
var Key: Char);
begin
if (not (key in ['0'..'9','.',#8])) or ((key='.') and (pos('.',Edit1.Text)>0)) then key:=#0;
end;
 
To 各位 及 土豆one:谢谢
但是如果用户输入了两次小数点就不好办,我是想在OnExit中再检查数据是否合法.
 
Procedure AllowInputNumber(obj: tobject
Var key: char);
Var
text: String;
SelStart, SelLength: integer;
Begin
SelStart := (obj As tdbedit).SelStart;
SelLength := (obj As tdbedit).SelLength;

//如果输入其他字符,不响应
If Not (key In ['0'..'9', '.', #8]) Then
Key := #0;

text := (obj As tdbedit).text;
If (Key = '.') Then Begin
If (Pos('.', Text) > 0) And ((SelLength = 0) Or (Not ((SelStart < Pos('.', Text)) And (SelLength >= Pos('.', Text) - SelStart)))) Then
Key := #0
//不出现两个小数点[/red]
If SelStart = 0 Then //小数点不出现在第一位
Key := #0;
End;
End;
 
多人接受答案了。
 
后退
顶部