간단한 거여서 대충 샘플을 만들어봤습니다.
function RemoveSpecialChar(sSrc: string): string;
var
I: integer;
begin
for I:=1 to Length(sSrc) do
if sSrc[I] in [#$20 .. #$7E] then
result := result + sSrc[I];
end;
위 코드는 한글도 날려버리는데요, 혹시 한글을 남겨야 한다면, 아래와 같이 하면 될 겁니다.
function RemoveSpecialChar(sSrc: string): string;
var
I: integer;
begin
for I:=1 to Length(sSrc) do
if (sSrc[I] in [#$20 .. #$7E]) or (ByteType(sSrc, I)<>mbSingleByte) then
result := result + sSrc[I];
end;
답변 써놓고 다시 질문을 봤더니 영숫자 외에 모든 문자를 특수문자라고 부르신 거네요. 그럼 다시 덧붙여서.
function RemoveSpecialChar(sSrc: string): string;
var
I: integer;
begin
for I:=1 to Length(sSrc) do
if (sSrc[I] in ['A'..'Z', 'a'..'z', '0'..'9']) or (ByteType(sSrc, I)<>mbSingleByte) then
result := result + sSrc[I];
end;
한글 고려 안해도 된다면 or 뒤의 조건 없애시면 되고요.
ByteType의 속도가 좀 느리기 때문에 처리 속도 차이가 꽤 날겁니다. 없애도 된다면 없애는 게 낫습니다.
철갑 님이 쓰신 글 :
: 이번에 사용하는 업무가 하필이면 특수문자와 개행문자를 모두 제거한 스트링만 받아야 하는 부분이 있어서 질문 드립니다.
:
: 사용하는건 델파이 6인데요
:
: 직접 찾아보니 TRegEx라는 컴포넌트를 사용하면 된다고 하기에 보니 이건 또 델파이 7 이후에나 지원한다고 보여서
:
: 혹시 델파이 6에서도 특수문자를 전부 제거하는 방식이 있는지 궁금해서 여쭤봅니다.
:
: 원하는 정규식은 [A-Za-z0-9가-힣\s.,] 수준인데 지금은 그걸 억지로 구현하기 위해서
:
: rt_text :=StringReplace(rt_text,'!','',[rfReplaceAll]);
: rt_text :=StringReplace(rt_text,'@','',[rfReplaceAll]);
: rt_text :=StringReplace(rt_text,'#','',[rfReplaceAll]);
: rt_text :=StringReplace(rt_text,'$','',[rfReplaceAll]);
: rt_text :=StringReplace(rt_text,'%','',[rfReplaceAll]);
: rt_text :=StringReplace(rt_text,'^','',[rfReplaceAll]);
: rt_text :=StringReplace(rt_text,'&','',[rfReplaceAll]);
: rt_text :=StringReplace(rt_text,'*','',[rfReplaceAll]);
: rt_text :=StringReplace(rt_text,'\','',[rfReplaceAll]);
: rt_text :=StringReplace(rt_text,'|','',[rfReplaceAll]);
: rt_text :=StringReplace(rt_text,'`','',[rfReplaceAll]);
: rt_text :=StringReplace(rt_text,'~','',[rfReplaceAll]);
:
: 같은 무식무식한 방법으로 처리하고 있습니다. 혹시 좀더 간단히 처리할 수 있는 방법이 없을까요.