С учетом регистра в веб-браузере - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть эти коды ниже, где они могут идентифицировать плохие слова (эти слова хранятся в базе данных), которые вы ввели с помощью элемента управления веб-браузера, и превратить их в звездочку (*). Я боролся с чувствительным к регистру, в котором вы можете ввести как строчные, так и прописные буквы (пример: HeLlo)

    string query;
    query = @"select Word from ListWords";

    List<string> words = new List<string>();

    DataSet ds;
    DataRow drow;

    ds = DatabaseConnection.Connection1(query);
    int index, total;

    total = ds.Tables[0].Rows.Count;

    string current_word;

    for (index = 0; index < total; index++ )
    {
        drow = ds.Tables[0].Rows[index];
        current_word = drow.ItemArray.GetValue(0).ToString();

        words.Add(current_word);
    }

    Console.WriteLine(query);


    Console.WriteLine("array:" + words);
    foreach (String key in words)
    {
        String substitution = "<span style='background-color: rgb(255, 0, 0);'>" + key + "</span>";

        int len = key.Length;
        string replace = "";

        for ( index = 0; index < len; index++)
        {
            replace += "*";
        }

        html.Replace(key, replace);
        //count++;
    }


    doc2.body.innerHTML = html.ToString();
}

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Попробуйте нормализовать введенное слово с помощью current_word.ToLower() перед добавлением их в список.

MSDN имеет больше информации об этом. https://docs.microsoft.com/en-us/dotnet/api/system.string.tolower?view=netframework-4.7.2

0 голосов
/ 07 сентября 2018

Упрощенным подходом было бы использование метода 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

0 голосов
/ 07 сентября 2018

Если я вас правильно понимаю, вы хотите найти в строке 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);
}

Редактировать

Кроме того, вам не нужно изобретать велосипед. Здесь - отличный пост о фильтрах ненормативной лексики.

...