2010-07-09 71 views
7

我想的是这样的:解析C#中“坏”字的字符串的最佳方式是什么?

foreach (var word in paragraph.split(' ')) { 
    if (badWordArray.Contains(word) { 
    // do something about it 
    } 
} 

,但我敢肯定有一个更好的办法。

在此先感谢!

UPDATE 我不希望自动...删除淫秽我的web应用程序,我想如果我认为“糟糕”一词是用来通知。然后我会自己检查一下,确保它是合法的。一个自动标记系统的种类。

+0

我继续编辑我的解决方案以响应您的更新。让我知道这是否回答你的问题。 – rakuo15 2010-07-09 10:29:02

+0

可能的重复[你如何实现一个良好的亵渎过滤?](http://stackoverflow.com/questions/273516/how-do-you-implement-a-good-profanity-filter) – 2010-10-22 16:21:53

回答

15

尽管您的方法有效,但可能会耗费一些时间。对于之前的SO问题,有一个wonderful response here。虽然这个问题谈论的是PHP而不是C#,但我认为它可以很容易地移植。

编辑补充示例代码:

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

这应该为你工作,或多或少。

编辑回答OP澄清:

我不希望删除淫秽自动...我的web应用程序,我想我们会通知您一个字,我认为“坏”字。

就像上面的替换部分,你可以看到,如果像这样匹配:

public bool HasBadWords(string inputWords) { 
    Regex wordFilter = new Regex("(puppies|kittens|dolphins|crabs)"); 
    return wordFilter.IsMatch(inputWords); 
} 

它将返回true,如果你传递给它的字符串包含列表中的任何话。

+1

通常“少”。 – 2010-07-09 03:32:43

+11

如果你打算这样做,**不要忘记'\ b' **。这是一个愚蠢的错误。 – 2010-07-09 03:34:02

+1

+1屁股和边界 – 2010-07-09 03:51:51

1

您可以考虑使用HashKey对象或Dictionary<T1, T2>代替数组,因为使用Dictionary可以使代码更高效,因为.Contains()方法变成了.Keys.Contains()方法,效率更高。如果你有大量的亵渎词(特别是不知道有多少人!)

4

在我的工作中,我们在自己的软件中加入了一些自动坏词过滤功能(浏览源代码和突然跑过包含几页淫秽内容的数组)。

一个提示是在对您的列表进行测试之前对用户输入进行预处理,在这种情况下,有人试图偷偷摸摸地看你的东西。因此,通过预处理的方式,我们

  • 大写一切都在输入
  • 除去大多数非字母数字(即,只是拼接任何空格或标点符号等)
  • 再假设有人试图通过数字字母,做这样的事情:用0代替零,9用G,5用S等(得到创意)

然后让一些朋友试图打破它。好有趣。

+0

我喜欢这个...简单而有效的为我的目的。谢谢。 – Chaddeus 2010-07-09 09:17:36

+1

不仅如此,要求你的朋友打破它是一个很好的QA和一个美好的夜晚:) – Flater 2013-11-27 09:18:33

相关问题