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

xqk2d5yq  于 2022-11-04  发布在  其他
关注(0)|答案(4)|浏览(160)

我有一个字符串,我们称它为MyStr。我试图去掉字符串中的每个非字母字符。比如,在MSN和Skype等即时消息中,人们会把他们的显示名称设置为**[-Bobby-]**。我想去掉字符串中所有非字母字符,所以我只剩下“name”。
我想创建一个TStringlist并将每个有效字符存储在其中,然后使用IndexOf来检查字符是否有效,但我希望有一个更简单的方法。

4urapxun

4urapxun1#

最简单的方法是

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;
tjvv9vkg

tjvv9vkg2#

尝试以下代码检查字符是否为字母字符。

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 的较新版本中,您可以使用Character.IsLetter函数。

6rqinv9w

6rqinv9w3#

我有一整套经过优化的字符串例程来做这些事情,它们可以在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;

您可以下载它们here

3gtaxfhh

3gtaxfhh4#

完美解决方案:

Result := TRegEx.Replace('Input12231213','[^a-zA-Z]+','');  // Result = 'Input'

在 Delphi XE中工作
http://regexpstudio.com

相关问题