在聊天中阻止字符串 Upper/Lower case C#

Blocking Strings in a chat Upper/Lower case C#

我正在尝试创建一个词过滤器来阻止文本文件中列出的任何词在聊天中广播。

初始代码非常有效,但前提是聊天中所说的词与文本文件中的词相同。

我需要一种方法来阻止单词,无论它是全大写、全小写还是介于两者之间的任何字符,但它必须与列表中的单词完全匹配。

例如,它不会过滤 "ship, SHIP or ShIp" 但它会过滤.. "Sh**, SH**" 你明白了。我对不包括制作巨大文本文件列表的其他方法持开放态度。

      foreach (var word in File.ReadAllLines("wordlist.txt"))
            {
                if (message.Contains(word))
                 player.SendToSelf(Channel.Reliable, ClPacket.GameMessage, "You Cannot Say That Here!");


            }

            return true;
}

我试过了

if (char.IsUpper(message[0]))
             player.SendToSelf(Channel.Reliable, ClPacket.GameMessage, "You Cannot Say That Here!");

可以使用 CurrentCulture/InvariantCultureIgnoreCase/OrdinalIgnoreCase 之类的东西,但我不确定如何实现这些东西。

使用外来字符屏蔽外语(非英语)单词也非常有益。

来自 string.Compare 上的这篇 MSDN 文章:

public static class StringExtensions
{
   public static bool Contains(this String str, String substring, 
                               StringComparison comp)
   {                            
      if (substring == null)
         throw new ArgumentNullException("substring", 
                                         "substring cannot be null.");
      else if (! Enum.IsDefined(typeof(StringComparison), comp))
         throw new ArgumentException("comp is not a member of StringComparison",
                                     "comp");

      return str.IndexOf(substring, comp) >= 0;                      
   }
}

您可以将此静态 class 添加到您的源代码中,并使用 StringComparison.InvariantCulture 作为 StringComparison

的参数
if (message.Contains(word, StringComparison.InvariantCulture))
    //blah