当前位置: 移动技术网 > IT编程>开发语言>.net > 高效.NET脏字过滤算法与应用实例

高效.NET脏字过滤算法与应用实例

2017年12月12日  | 移动技术网IT编程  | 我要评论

本文实例讲述了高效.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<string> hash = new hashset<string>(); //关键字
    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", "<script>alert('该评论含有不合法文字!')</script>");
}
else
{
    pinglun();//写入评论表
}

更多关于asp.net相关内容感兴趣的读者可查看本站专题:《asp.net字符串操作技巧汇总》、《asp.net操作json技巧总结》、《asp.net操作xml技巧总结》、《asp.net文件操作技巧汇总》、《asp.net ajax技巧总结专题》及《asp.net缓存操作技巧总结》。

希望本文所述对大家asp.net程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网