我在下面有这些代码,它可以识别您使用Web浏览器控件输入的不良词(这些词存储在数据库中)并将其转换为星号(*)。我一直在努力区分大小写,在这种情况下您可以输入小写或大写字母(例如:HeLlo)
Desired data
答案 0 :(得分:0)
如果我对您的理解正确,那么您想在html
字符串中搜索过滤器列表中的单词,并用一些HTML
编码字符串加上*
代替“坏话”。
Regex
是一个很好的解决方案。
因此,假设您的单词列表如下:
List<string> badWords = new List<string>
{
"Damn",
"Hell",
"Idiot"
};
这是您的HTML
。
var html = "You're a damn idIOT!!";
好的,HTML
并不多,但请忍受。
现在您遍历单词列表,并且我们为每个单词创建一个Regex
,并且忽略大小写。然后根据单词的长度,创建一个替换字符串。然后致电Regex.Replace()
。
foreach (var word in badWords)
{
Regex rgx = new Regex(word, RegexOptions.IgnoreCase);
var blocked = new string('*', word.Length);
var replacement = "<span style='background-color: rgb(255, 0, 0);'>" + blocked + "</span>";
html = rgx.Replace(html, replacement);
}
此外,您真的不需要重新发明轮子。 Here是一篇有关亵渎过滤器的出色文章。
答案 1 :(得分:0)
答案 2 :(得分:0)
一种简化的方法是使用Regex.Replace
方法,您可以传递一个标志以忽略大小写。
这是一个使用List<string>
的“坏话”的示例,以及如何使用它。缺点是,如果一个单词包含一个坏单词,则该单词的该部分也会被删除。
var badWords = new List<string>
{
"Bleeping",
"Bad"
};
var html = "This is my bleeping html file with bad words in it!\n" +
"But realize it will replace partial occurrences, too,\n" +
"for example, now I can't write BADGER!";
Console.WriteLine("Old html:\n" + html + Environment.NewLine);
foreach (var badWord in badWords)
{
html = Regex.Replace(html, badWord, new string('*', badWord.Length), RegexOptions.IgnoreCase);
}
Console.WriteLine("New html:\n" + html);