如何验证文本框中是否只包含Delphi中的数字?

时间:2011-06-23 13:23:11

标签: delphi delphi-5

这可能是一个非常简单的问题,但我从未接触过delphi。 我有一个编辑框,可以接受角色。但在某些特殊情况下,我必须验证编辑框字符只是数字。

我们怎么能这样做?

注意:用户可以输入任何字符,但在验证时我必须验证上面的字符。

4 个答案:

答案 0 :(得分:10)

我不知道您打算使用什么事件来调用验证,但验证可以像这样完成:

if TryStrToInt(Edit1.Text, Value) then
  DoSomethingWithTheNumber(Value)
else
  HandleNotANumberError(Edit1.Text);

答案 1 :(得分:6)

我不明白为什么你想让用户输入一个字符,以后不允许它通过验证。

如果你真的需要阻止进入,那么为你做这件事的控制比自己破解它更好。如果你的delphi版本真的很旧,那么试试JVCL组件库中的JVCL:TJvValidateEdit,例如,在所有版本的delphi中。但是,在最近的常规delphi版本(2009及更高版本)中,已经内置了几种可能的解决方案,包括TMaskEdit和TSpinEdit。

如果您真的只需要编写验证方法,那么请考虑使用正则表达式或手动编码验证函数,并将该代码与控件分开。

// Taking OP question obsessively literally, this 
// function doesn't allow negative sign, decimals, or anything
// but digits
function IsValidEntry(s:String):Boolean;
var
  n:Integer;
begin
  result := true;
  for n := 1 to Length(s) do begin
    if (s[n] < '0') or (s[n] > '9') then
    begin
       result := false;
       exit;
    end;
  end;
end;

答案 2 :(得分:3)

我知道你说user can enter any char but at the time of validation 但是我想提供一个替代方案,因为允许用户输入值似乎非常愚蠢,只是在1分钟后向用户投诉;只是闻起来很好......不太好。

除了数字,我不允许输入任何内容 如果你的整数特别容易:

填写编辑框的OnKeyPress事件。

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char) ;
begin
  if not(Key IN ['0'..'9', #8, #9, #13, #27, #127]) then key:= #0;
end;

这会丢弃任何不是数字的内容。

如果您允许使用否定数字,则需要额外检查以查看之前是否未输入-

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char) ;
var
  Edit1Text: string;
begin
  if (Key = '-') and Pos('-',Edit1.Text) = 0 then begin
    Edit1.Text:= '-' + Edit1.Text;  //Force the '-' to be in the front.
  end
  else if (Key = '-') and Pos('-',Edit1.Text) <> 0 then begin  //else flip the sign
    Edit1Text:= Edit1.Text;
    Edit1.Text:= StringReplace(Edit1Text, '-', '',[]);
  end;
  if not(Key IN ['0'..'9', #8, #9, #13, #27, #127]) then key:= #0;
end;

由于用户还可以将数据粘贴到编辑框中,因此您还需要在更改编辑中的文本时检查数据。
因为这在ONKeyPress事件中相当繁琐,我使用自定义编辑组件来执行此类检查,并防止用户在编辑框中输入口内输入。

就我个人而言,我不相信发出错误信息,您应该始终努力不让用户首先输入无效数据。

答案 3 :(得分:3)

  

但在某些特殊情况下,我有   验证编辑框字符   只有数字。

您需要两个编辑控件。一个用于仅数字值,一个用于allow-all值。启用或禁用符合条件的控件。如果这两个控件具有良好的标题(可能还有提示,为什么启用或禁用控件),那么用户就知道他必须输入什么以及为什么。

  • 我不喜欢阻止用户。场景:
  • 我输入“ abc123
  • 离开编辑控件时,我收到错误消息“只允许数字”
  • 我意识到我忘了达到特殊条件
  • 我想做点什么来达到特殊条件
  • 但我不能,因为我总是收到错误消息“只允许数字”
  • 所以我必须将值更正为“ 123
  • 做到达到特殊条件的事情
  • 再次重新输入旧的“abc123”值

aarrgghh : - )

对于简单的数据输入表单,我执行以下操作:我允许输入错误,但是对于每个具有无效输入的编辑控件,将字体颜色切换为红色(当不允许空值时,红色字体颜色不够)。如果用户尝试发布数据,我会提供一个错误消息,告知用户所有无效输入字段并中止帖子。