检查TStringList是否包含特定符号?

时间:2011-12-26 01:19:43

标签: delphi

如何检查TStringList是否包含特定符号?

如果在字符串列表中找到以下任何内容,我想显示一条消息:

\ /:*? “<> |

类似的东西:

var
  SL: TStringList;
  i: Integer;
begin
  SL := TStringList.Create;
  try
    for i := 0 to SL.Count -1 do
    begin
      if SL.Strings[i] ?? then
      begin
        MessageDlg('Stringlist contains bad characters', mtError, [mbOK], 0);
      end else
      begin
        // no bad characters
      end;
    end;
  finally
    SL.Free;
  end;
end;

3 个答案:

答案 0 :(得分:2)

使用pos()函数搜索TStringList.Text属性中的每个符号。或者,对TStringList.Text属性中的字符进行交互,并检查它们是否在坏字符集中。第二种方法可能更快:

Function Tsomething.CheckList(list:TStringList;badChars:set of char):boolean;
var charIndex:integer;
    thisChar:char;
begin
  result:=false; // in case of empty list
  for charIndex:=1 to length(list.text) do // indices into a string start at 1
  begin
    thisChar:=list.text[charIndex];
    result:=thisChar in badChars;
    if result then exit;
  end;
end;
..
  if CheckList(myList,['\','/',':','*','?','"','<','>','|']) then application.messageBox(blah);

..但你必须要两个都确定。

答案 1 :(得分:1)

const
  ForbiddenChars = ['\','/',':','*','?','"','<','>','|'];
var
  SL: TStringList;
  StrTemp: String;
  i,j: Integer;
begin
  SL := TStringList.Create;
  try
    for i := 0 to SL.Count - 1 do
    begin
      StrTemp := SL.Strings[i];
      for j := 1 to Length(StrTemp) do
      begin
        if StrTemp[j] in ForbiddenChars then
        begin
          MessageDlg('Stringlist contains bad characters', mtError, [mbOK], 0);
        end;
      end;
    end;
  finally
    SL.Free;
  end;
end;

或者如果你使用Free Pascal,你可以使用更简单的StrUtils.PosSet(ForbiddenChars,SL.Strings[i]),但我不知道这个函数是否也存在于Delphi中。

答案 2 :(得分:1)

您可以使用pos()函数来测试字符串是否包含特定字符。并且,SL.Text是一个字符串中的所有字符串。

if (Pos('\', SL.Text) > 0) OR (pos('/', SL.Text) > 0) then
  MessageDlg('Stringlist contains bad characters', mtError, [mbOK], 0);