Welcome

首页 / 网页编程 / ASP.NET / 高效.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<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程序设计有所帮助。