检查MyString[1]是否为字母字符?

检查MyString[1]是否为字母字符?,string,delphi,char,character,String,Delphi,Char,Character,我有一个字符串,我们把它叫做MyStr。我正在尝试去除字符串中的所有非字母字符。比如,在MSN和Skype这样的即时通讯中,人们把他们的显示名像[-Bobby-]。我想删除该字符串中所有不是字母字符的内容,所以我只剩下“名称” 我怎样才能在德尔福做到这一点?我正在考虑创建一个TStringlist并将每个有效字符存储在其中,然后使用IndexOf检查字符是否有效,但我希望找到一种更简单的方法。尝试使用此代码检查字符是否为字母字符 MyStr:='[-Bobby-]'; //is an a

我有一个字符串,我们把它叫做
MyStr
。我正在尝试去除字符串中的所有非字母字符。比如,在MSN和Skype这样的即时通讯中,人们把他们的显示名像[-Bobby-]。我想删除该字符串中所有不是字母字符的内容,所以我只剩下“名称”


我怎样才能在德尔福做到这一点?我正在考虑创建一个
TStringlist
并将每个有效字符存储在其中,然后使用
IndexOf
检查字符是否有效,但我希望找到一种更简单的方法。

尝试使用此代码检查字符是否为字母字符

  MyStr:='[-Bobby-]';
  //is an alphabetical character ?
  if MyStr[1] in ['a'..'z','A'..'Z'] then
要从字符串中删除所有非字母字符(英语字符),您可以使用类似的方法

NewStr:='';
for i := 1 to Length(MyStr) do
 if MyStr[i] in ['a'..'z','A'..'Z'] then
   NewStr:=NewStr+MyStr[i];
现在
NewStr
变量只包含字母字符


在较新版本的delphi中,您可以使用该函数。

最简单的方法是

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;
但这只会把英文字母看成“字母字符”。它甚至不会把极其重要的瑞典字母“,”和“”作为“字母字符”来考虑! 稍微复杂一点的是

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;

我有一整套优化的字符串例程来做这件事,它们可以与Unicode和非Unicode Delphi一起工作。最相关的两个方面是:

function CsiRemoveArgs(const pInStr: string; const pArgs: string;
                       pRestrictToArgs: Boolean = False): string;
function CsiRemoveArgs(const pInStr: string; pArgs: TSysCharSet;
                       pRestrictToArgs: Boolean = False): string;
您可以下载它们。

完美解决方案:

Result := TRegEx.Replace('Input12231213','[^a-zA-Z]+','');  // Result = 'Input'
在Delphi XE中工作


TStringList
听起来效率很低…@Jeff-你需要只处理Ansi字符串(英文字符)还是Unicode字符?@Ken-我也需要像“æå”这样的字符。@Jeff你不需要在所有问题的开头都写“你好,所以”你不需要签字,因为我们可以在Q下看到你的名字和照片。另外,用两个换行符来创建段落。我把你的问题编辑成这样+1不管怎样,问得好。@David-只是出于礼貌:P@Andreas - +1! 是否有可能将ÆØ和那些也包括在内?谢谢在第一种方法中,您可以将它们添加到集合中(
“Æ”、“Ø”、“Å”、“Ä”、“å”、“ä”、“ö”
)。后一种方法使用
Isleter
,将自动包含所有语言的所有字母。@Jeff GetAlphaSubstr2正是这样做的+1。我会编写与@David相同的代码
GetAlphaSubstr2
——啊,太好了!我现在就要这么做了!:)必须对其进行修改,以便在提取第一个名称后,它会将所有内容都丢弃。如果使用与区域设置相关的版本来覆盖a..Z范围之外的其余字母字符呢?@jeroen,答案为
…以从字符串中删除所有非字母字符(英语字符)
要覆盖其余的字母字符,OP可以使用
Character.isleter
功能,或者只需使用额外的字符来扩展集合,就像andreas在comments中解释的那样。对于允许覆盖A..Z范围之外的其余字母字符的例程,+1。即使在美国,人们应该不那么天真。