簡體   English   中英

在C#中解析“壞”字的字符串的最佳方法是什么?

[英]What's the best way to parse a string for “bad” words in C#?

我想的是:

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

但我確信有更好的方法。

提前致謝!

更新我不打算自動刪除猥褻...對於我的網絡應用程序,如果使用我認為“壞”的單詞,我希望收到通知。 然后我會自己檢查以確保它是合法的。 一種自動標記系統。

雖然你的方式有效,但可能有點耗費時間。 對於之前的SO問題, 這里有一個很好的回答 雖然問題是談論PHP而不是C#,但我認為它可以輕松移植。

編輯以添加示例代碼:

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

這應該或多或少對你有用。

編輯以回答OP澄清:

我不打算自動刪除猥褻...對於我的網絡應用程序,如果使用我認為“壞”的單詞,我希望收到通知。

就像上面的替換部分一樣,你可以看到是否匹配如此:

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

如果傳遞給它的字符串包含列表中的任何單詞,它將返回true

在我的工作中,我們在我們的軟件中添加了一些自動壞詞過濾(瀏覽源代碼並突然在包含幾頁淫穢內容的數組中運行時有點令人震驚)。

一個提示是在對您的列表進行測試之前預先處理用戶輸入,在這種情況下,有人試圖偷偷摸摸您。 所以通過預處理,我們

  • 大寫輸入中的所有內容
  • 刪除大多數非字母數字(即,只拼出任何空格或標點符號等)
  • 然后假設有人試圖為字母傳遞數字,做這樣的事情:用O替換零,用G替換9,用S替換5等等(獲得創造性)

然后讓一些朋友嘗試打破它。 好有趣。

您可以考慮使用HashKey對象或Dictionary<T1, T2 >而不是數組,因為使用Dictionary可以使代碼更有效,因為.Contains()方法變得更有效.Keys.Contains()。 如果你有大量的褻瀆行為(不確定有多少!),情況尤其如此

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM