문자열이 숫자로만 되어있는지 체크하기 위해 잔머리를 굴려서 컨버팅 함수를 사용하곤 했다.
s:='333';
if TryStrToInt(s, i) then OutputDebugString(Format('s는 숫자로 이루어진 문자열이다. s=%s', [s]))
else OutputDebugString(Format('s는 숫자로 이루어진 문자열이 아니다. s=%s', [s]));
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;
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;
정규표현식 모듈을 설치하기가 귀찮다...
'Delphi' 카테고리의 다른 글
[Delphi] 각 OS별 NewLine 처리 (CR/LF) (0) | 2010.06.07 |
---|---|
[Delphi] 실행파일 버전정보 가져오기 (0) | 2010.06.04 |
[Delphi] 윈도우 다시 그리기 (0) | 2010.06.01 |
[Delphi] DLL Injection (CreateRemoteThread) (2) | 2010.05.31 |
[Delphi] TStringList의 CustomSort (0) | 2010.05.24 |