Web浏览器中区分大小写

时间:2018-09-07 16:10:15

标签: c# webbrowser-control case-sensitive mshtml

我在下面有这些代码,它可以识别您使用Web浏览器控件输入的不良词(这些词存储在数据库中)并将其转换为星号(*)。我一直在努力区分大小写,在这种情况下您可以输入小写或大写字母(例如:HeLlo)

Desired data

3 个答案:

答案 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)

在将输入单词添加到列表之前,请尝试使用current_word.ToLower()标准化输入单词。 MSDN上有更多信息。 https://docs.microsoft.com/zh-cn/dotnet/api/system.string.tolower?view=netframework-4.7.2

答案 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);

输出 enter image description here