Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if MyString[1] is an alphabetical character?

I have a string, lets call it MyStr. I am trying to get rid of every non-alphabetical character in the string. Like, in IM's like MSN and Skype, people put their display names like [-Bobby-]. I would like to remove everything in that string that is not an alphabetical character, so all I am left with, is the "name".

How can I do that in Delphi? I was thinking about creating a TStringlist and store each valid character in there, and then use IndexOf to check if the char is valid, but I was hoping for an easier way.

like image 357
Jeff Avatar asked Mar 02 '11 18:03

Jeff


1 Answers

The simplest approach is

function GetAlphaSubstr(const Str: string): string;
const
  ALPHA_CHARS = ['a'..'z', 'A'..'Z'];
var
  ActualLength: integer;
  i: Integer;
begin
  SetLength(result, length(Str));
  ActualLength := 0;
  for i := 1 to length(Str) do
    if Str[i] in ALPHA_CHARS then
    begin
      inc(ActualLength);
      result[ActualLength] := Str[i];
    end;
  SetLength(Result, ActualLength);
end;

but this will only consider English letters as "alphabetical characters". It will not even consider the extremely important Swedish letters Å, Ä, and Ö as "alphabetical characters"!

Slightly more sophisticated is

function GetAlphaSubstr2(const Str: string): string;
var
  ActualLength: integer;
  i: Integer;
begin
  SetLength(result, length(Str));
  ActualLength := 0;
  for i := 1 to length(Str) do
    if Character.IsLetter(Str[i]) then
    begin
      inc(ActualLength);
      result[ActualLength] := Str[i];
    end;
  SetLength(Result, ActualLength);
end;
like image 102
Andreas Rejbrand Avatar answered Sep 21 '22 15:09

Andreas Rejbrand