千家信息网

.NET脏字过滤算法以及应用是怎样的

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这期内容当中小编将会给大家带来有关.NET脏字过滤算法以及应用是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。BadWordsFilter.cs类using
千家信息网最后更新 2025年02月04日.NET脏字过滤算法以及应用是怎样的

这期内容当中小编将会给大家带来有关.NET脏字过滤算法以及应用是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

BadWordsFilter.cs类

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Collections;using System.Data;namespace WNF{  public class BadWordsFilter  {    private HashSet hash = new HashSet(); //关键字    private byte[] fastCheck = new byte[char.MaxValue];    private byte[] fastLength = new byte[char.MaxValue];    private BitArray charCheck = new BitArray(char.MaxValue);    private BitArray endCheck = new BitArray(char.MaxValue);    private int maxWordLength = 0;    private int minWordLength = int.MaxValue;    public BadWordsFilter()    {    }    //初始化关键字    public void Init(DataTable badwords)    {      for (int j = 0; j < badwords.Rows.Count; j++)      {        string word = badwords.Rows[j][0].ToString();        maxWordLength = Math.Max(maxWordLength, word.Length);        minWordLength = Math.Min(minWordLength, word.Length);        for (int i = 0; i < 7 && i < word.Length; i++)        {          fastCheck[word[i]] |= (byte)(1 << i);        }        for (int i = 7; i < word.Length; i++)        {          fastCheck[word[i]] |= 0x80;        }        if (word.Length == 1)        {          charCheck[word[0]] = true;        }        else        {          fastLength[word[0]] |= (byte)(1 << (Math.Min(7, word.Length - 2)));          endCheck[word[word.Length - 1]] = true;          hash.Add(word);        }      }    }    public string Filter(string text, string mask)    {      throw new NotImplementedException();    }    //检查是否有关键字    public bool HasBadWord(string text)    {      int index = 0;      while (index < text.Length)      {        int count = 1;        if (index > 0 || (fastCheck[text[index]] & 1) == 0)        {          while (index < text.Length - 1 && (fastCheck[text[++index]] & 1) == 0) ;        }        char begin = text[index];        if (minWordLength == 1 && charCheck[begin])        {          return true;        }        for (int j = 1; j <= Math.Min(maxWordLength, text.Length - index - 1); j++)        {          char current = text[index + j];          if ((fastCheck[current] & 1) == 0)          {            ++count;          }          if ((fastCheck[current] & (1 << Math.Min(j, 7))) == 0)          {            break;          }          if (j + 1 >= minWordLength)          {            if ((fastLength[begin] & (1 << Math.Min(j - 1, 7))) > 0 && endCheck[current])            {              string sub = text.Substring(index, j + 1);              if (hash.Contains(sub))              {                return true;              }            }          }        }        index += count;      }      return false;    }  }}

引用:

string sql = "select keywords from tb_keyword";BadWordsFilter badwordfilter = new BadWordsFilter();//初始化关键字badwordfilter.Init(oEtb.GetDataSet(sql).Tables[0]);//检查是否有存在关键字bool a = badwordfilter.HasBadWord(TextBox1.Text);if (a == true){    Page.RegisterClientScriptBlock("a", "");}else{    PingLun();//写入评论表}

上述就是小编为大家分享的.NET脏字过滤算法以及应用是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

0