什么';这是解析“的字符串的最佳方法”;“坏的”;C#中的单词?

什么';这是解析“的字符串的最佳方法”;“坏的”;C#中的单词?,c#,filter,profanity,C#,Filter,Profanity,我在想这样的事情: foreach (var word in paragraph.split(' ')) { if (badWordArray.Contains(word) { // do something about it } } 但我相信有更好的办法 提前谢谢 更新 我不想自动删除淫秽内容。。。对于我的web应用程序,如果使用了我认为“不好”的单词,我希望得到通知。然后我会亲自检查,确保它是合法的。一种自动标记系统。当你的方式工作时,可能会有点费时。前面的SO问题有一个答

我在想这样的事情:

foreach (var word in paragraph.split(' ')) {
  if (badWordArray.Contains(word) {
    // do something about it
  }
}
但我相信有更好的办法

提前谢谢

更新
我不想自动删除淫秽内容。。。对于我的web应用程序,如果使用了我认为“不好”的单词,我希望得到通知。然后我会亲自检查,确保它是合法的。一种自动标记系统。

当你的方式工作时,可能会有点费时。前面的SO问题有一个答案。虽然这个问题讨论的是PHP而不是C#,但我认为它很容易移植

编辑以添加示例代码:

public string FilterWords(string inputWords) {
    Regex wordFilter = new Regex("(puppies|kittens|dolphins|crabs)");
    return wordFilter.Replace(inputWords, "<3");
}

如果您传递给它的字符串包含列表中的任何单词,它将返回<代码> true<代码> .p> >您可以考虑使用<代码> HashKey < /Cord>对象或<代码>字典代替数组,例如,使用字典可以使代码更高效,因为.Cube()方法变成.KEY。这是更有效的方式。如果你有大量的亵渎(不知道有多少!:)

在我的工作中,我们在我们的软件中加入了一些自动的坏词过滤(浏览源代码并突然在包含几页淫秽内容的数组中运行,这有点令人震惊)

一个技巧是在测试列表之前对用户输入进行预处理,以防有人试图从你身边偷偷溜走。所以通过预处理,我们

  • 输入中的所有内容都大写
  • 删除大多数非字母数字(也就是说,只需拼接出任何空格或标点符号等)
  • 然后假设有人试图为字母传递数字,这样做:用O替换零,用G替换9,用S替换5,等等(发挥创意)

然后找几个朋友试着打破它。这很有趣。

如果要这样做,请不要忘记
\b
。这是个错误。哈哈,干得好。单词边界当然很重要,但是如果你想过滤像
红小猫
螃蟹
这样的东西,这就可以了。谢谢你,我想你的答案和Detmar的答案结合起来就是我最后要做的。非常感谢。我喜欢这个。。。对我来说简单有效。谢谢。不仅如此,让你的朋友打破它既是一个很好的质量保证,也是一个很好的夜晚:)我继续编辑我的解决方案以回应你的更新。如果这能回答您的问题,请告诉我。可能的副本
public bool HasBadWords(string inputWords) {
    Regex wordFilter = new Regex("(puppies|kittens|dolphins|crabs)");
    return wordFilter.IsMatch(inputWords);
}