代码之家  ›  专栏  ›  技术社区  ›  Re0sless

在Delphi中,检查值是否为日期/数字的正确方法是什么

  •  6
  • Re0sless  · 技术社区  · 17 年前

    在Delphi中,检查值是否为日期/数字的正确方法是什么?

    我知道其他语言也有像isDate和isNaN这样的函数,但是Delphi的等价物是什么呢?就在我拿到这个的那一刻

    function isNumeric(s1:string):boolean;
    begin   
       // will throw exception if its not a number
      // there must be a better way to do this!!
      try
         StrTofloat(s1);
           result :=  TRUE ;
         except
           result := FALSE;
          end;
    end;
    

    6 回复  |  直到 17 年前
        1
  •  14
  •   Alan    17 年前

    对于整数,可以使用TryStrToInt进行检查和转换,而不会引发异常:

    function TryStrToInt(const s: string; out i : integer): boolean;
    

    不过,我不能绝对确定是否有完全等效的浮点值,因此您可能需要使用StrToFloat()并接受TFormatException的可能性。

        2
  •  2
  •   Rômulo Ceccon    17 年前

    有一系列函数,如 TryStrToFloat TryStrToDateTime 诸如此类的。顺便说一句 StrToFloat 其他人在引发异常之前在内部使用“Try”版本。

        3
  •  2
  •   Cruachan    17 年前

    首先,StrToFloatDef函数在这里是一个有用的替代方法,如果您想保持语言的原样。

    http://www.delphi-jedi.org/ )然后从那里开始使用StrIsNumber函数。

    绝地武士是开源的,在很多方面都非常有用,而且几乎是必须的。

        4
  •  2
  •   Kroden    17 年前

    function IsNumeric(aValue : string): boolean;
    var
      i : integer;
    begin
      result := false;
      for i := 1 to Length(aValue) do
        if (NOT (aValue[i] in ['0'..'9', '.', '-', '+', 'E', 'e'])) then
          exit;
      try
        StrToFloat(aValue);
        result := true;
      except
      end;
    end;
    

        5
  •  1
  •   user10067253    8 年前

    我使用strtointdef(单字符,-1)

    procedure TForm1.Button1Click(Sender: TObject);
    var
    x,i:integer;
    teststring:string;
    
    begin
    teststring:='1235';
    for i:=1 to length(teststring) do begin
        x:= strtointdef(teststring[i],-1);
        if x=-1 then break;
    end;
    if x<0 then showmessage('not numeric')
    else showmessage('numeric');
    
    end;
    
        6
  •  0
  •   skamradt    17 年前

    您可以通过选中弹出的“忽略此异常”框来关闭不需要的恼人异常。然后将忽略该异常类的未来异常。要再次开始询问,只需转到选项|调试器选项并取消选中您忽略的选项。