문자열이 숫자로만 되어있는지 체크하기 위해 잔머리를 굴려서 컨버팅 함수를 사용하곤 했다.

s:='333';
if TryStrToInt(s, i) then OutputDebugString(Format('s는 숫자로 이루어진 문자열이다. s=%s', [s]))
else OutputDebugString(Format('s는 숫자로 이루어진 문자열이 아니다. s=%s', [s]));



근데 이렇게 하면 한가지 맹점이 존재하는데,
양수와 음수를 나타내는 부호도 숫자표현의 일부로 처리해버리는 것이다.

예를 들어,
'+333' 은 엄밀히 말하자면 숫자로만 이루어진 문자열이 아니지만 TryStrToInt() 같은 함수로 돌리면 '양수 333'으로 처리해버려서 정수로 판단해 버린다. ('-333'도 마찬가지)

잔대가리 굴리지 말고 그냥 아래처럼 처리하자...


function isNumber(s: String): Boolean;
var i: Integer;
begin
  Result:=True;

  if Length(Trim(s))=0 then begin
    Result:=False;
    Exit;
  end

  s:=Trim(s);
  for i:=1 to Length(s) do begin
    if not
CharInSet(s[i], ['0'..'9']) then begin
      Result:=False;
      Exit;
    end;
  end;
end;






정규표현식 모듈을 설치하기가 귀찮다...







Posted by bloodguy
,