none
none

Reputation: 4827

Delphi isNumber

Is there a method in Delphi to check if a string is a number without raising an exception?

its for int parsing.

and an exception will raise if one use the

try
  StrToInt(s);
except
  //exception handling
end;

Upvotes: 23

Views: 106556

Answers (10)

Ivan Z
Ivan Z

Reputation: 1592

In some languages decimal separators are different (for example, '.' is used in English and ',' is used in Russian). For these cases to convert string to real number the following procedure is proposed:

function TryStrToFloatMultiLang(const S : String; out Value : Extended) : Boolean;
var
  dc : char;
begin
  Result := false;
  dc := DecimalSeparator;
  DecimalSeparator := '.';
  try
    Result := TryStrToFloat(S, Value);
  except
    DecimalSeparator := ',';
    Result := TryStrToFloat(S, Value);
  end;
  DecimalSeparator := dc;
end;

Update

As @Pep mentioned TryStrToFloat catch exceptions, but it returns boolean value. So the correct code is:

function TryStrToFloatMultiLang(const S : String; out Value : Extended) : Boolean;
var
  dc : char;
begin
  Result := false;
  dc := DecimalSeparator;
  DecimalSeparator := '.';
  Result := TryStrToFloat(S, Value);
  if not Result then begin
    DecimalSeparator := ',';
    Result := TryStrToFloat(S, Value);
  end;
  DecimalSeparator := dc;
end;

Upvotes: 1

dronik
dronik

Reputation: 924

XE4 and newer:

for ch in s do
   TCharacter.IsNumber(ch);

Don't forget:

uses System.Character    

Upvotes: 10

sina
sina

Reputation: 331

use this function

function IsNumber(N : String) : Boolean;
var
I : Integer;
begin
Result := True;
if Trim(N) = '' then
 Exit(False);

if (Length(Trim(N)) > 1) and (Trim(N)[1] = '0') then
Exit(False);

for I := 1 to Length(N) do
begin
 if not (N[I] in ['0'..'9']) then
  begin
   Result := False;
   Break;
 end;
end;

end;

Upvotes: 3

ba__friend
ba__friend

Reputation: 5903

function TryStrToInt(const S: string; out Value: Integer): Boolean;

TryStrToInt converts the string S, which represents an integer-type number in either decimal or hexadecimal notation, into a number, which is assigned to Value. If S does not represent a valid number, TryStrToInt returns false; otherwise TryStrToInt returns true.

To accept decimal but not hexadecimal values in the input string, you may use code like this:

function TryDecimalStrToInt( const S: string; out Value: Integer): Boolean;
begin
   result := ( pos( '$', S ) = 0 ) and TryStrToInt( S, Value );
end;

Upvotes: 70

da-soft
da-soft

Reputation: 7750

var
  s: String;
  iValue, iCode: Integer;
...
val(s, iValue, iCode);
if iCode = 0 then
  ShowMessage('s has a number')
else
  ShowMessage('s has not a number');

Upvotes: 28

Andrey  Rubanko
Andrey Rubanko

Reputation: 299

standard unit Variants

function VarIsNumeric(v:Variant):Boolean

Upvotes: -2

androschuk.a
androschuk.a

Reputation: 289

When you using procedure

val(s, i, iCode);

and set value xd ....

val('xd', i, iCode)

as a result we obtain: 13

Upvotes: 0

Robert Niestroj
Robert Niestroj

Reputation: 16131

In delphi 7 you can use the Val procedure. From the help:

Unit: System Delphi syntax: procedure Val(S; var V; var Code: Integer);

S is a string-type expression; it must be a sequence of characters that form a signed real number.

V is an integer-type or real-type variable. If V is an integer-type variable, S must form a whole number.

Code is a variable of type Integer.

If the string is invalid, the index of the offending character is stored in Code; otherwise, Code is set to zero. For a null-terminated string, the error position returned in Code is one larger than the actual zero-based index of the character in error.

Upvotes: 3

Bharat
Bharat

Reputation: 6866

Try this function StrToIntDef()

From help

Converts a string that represents an integer (decimal or hex notation) to a number with error default.

Pascal

function StrToIntDef(const S: string; Default: Integer): Integer;

Edit

Just now checked the source of TryStrToInt() function in Delphi 2007. If Delphi 7 dont have this function you can write like this. Its just a polished code to da-soft answer

function TryStrToInt(const S: string; out Value: Integer): Boolean;
var
  E: Integer;
begin
  Val(S, Value, E);
  Result := E = 0;
end;

Upvotes: 19

GJ.
GJ.

Reputation: 10937

For older Delphi versions from delphi 5 help example:

uses Dialogs;
var 

  I, Code: Integer;
begin
  { Get text from TEdit control }
  Val(Edit1.Text, I, Code);
  { Error during conversion to integer? }
  if Code <> 0 then
    MessageDlg('Error at position: ' + IntToStr(Code), mtWarning, [mbOk], 0);
  else
    Canvas.TextOut(10, 10, 'Value = ' + IntToStr(I));   
end;

Upvotes: 2

Related Questions