高效.NET臟字過濾算法與應(yīng)用實例
本文實例講述了高效.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>(); //關(guān)鍵字
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()
{
}
//初始化關(guān)鍵字
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();
}
//檢查是否有關(guān)鍵字
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();
//初始化關(guān)鍵字
badwordfilter.Init(oEtb.GetDataSet(sql).Tables[0]);
//檢查是否有存在關(guān)鍵字
bool a = badwordfilter.HasBadWord(TextBox1.Text);
if (a == true)
{
Page.RegisterClientScriptBlock("a", "<script>alert('該評論含有不合法文字!')</script>");
}
else
{
PingLun();//寫入評論表
}
更多關(guān)于asp.net相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《asp.net字符串操作技巧匯總》、《asp.net操作json技巧總結(jié)》、《asp.net操作XML技巧總結(jié)》、《asp.net文件操作技巧匯總》、《asp.net ajax技巧總結(jié)專題》及《asp.net緩存操作技巧總結(jié)》。
希望本文所述對大家asp.net程序設(shè)計有所幫助。
相關(guān)文章
asp.net“服務(wù)器應(yīng)用程序不可用” 解決方法
服務(wù)器應(yīng)用程序不可用 您試圖在此 Web 服務(wù)器上訪問的 Web 應(yīng)用程序當(dāng)前不可用。請點擊 Web 瀏覽器中的“刷新”按鈕重試您的請求。 管理員注意事項: 詳述此特定請求失敗原因的錯誤消息可在 Web 服務(wù)器的系統(tǒng)事件日志中找到。請檢查此日志項以查明導(dǎo)致該錯誤發(fā)生的原因。2008-10-10
.NET醫(yī)院公眾號系統(tǒng)線程CPU雙高問題分析
這篇文章主要介紹了.NET醫(yī)院公眾號系統(tǒng) 線程CPU雙高分析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
使用aspnet_regiis.exe重新注冊.NET Framework
本文主要介紹使用aspnet_regiis.exe重新注冊.NET Framework的方法,簡單實用,有需要的朋友拿去用吧。2016-05-05
c# 讀取Northwind數(shù)據(jù)庫image字段
我在寫一個三層結(jié)構(gòu)Demo時,使用了Northwind這個范例數(shù)據(jù)庫。但是奇怪的是,讀取Categories表的Picture列(image類型)無法在image控件中正常顯示(解決方案在后面代碼中可以看到)。2009-03-03

