高效.NET脏字过滤算法与应用实例
本文实例讲述了高效.NET脏字过滤算法。分享给大家供大家参考,具体如下:
BadWordsFilter.cs类
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Web; usingSystem.Collections; usingSystem.Data; namespaceWNF { publicclassBadWordsFilter { privateHashSet<string>hash=newHashSet<string>();//关键字 privatebyte[]fastCheck=newbyte[char.MaxValue]; privatebyte[]fastLength=newbyte[char.MaxValue]; privateBitArraycharCheck=newBitArray(char.MaxValue); privateBitArrayendCheck=newBitArray(char.MaxValue); privateintmaxWordLength=0; privateintminWordLength=int.MaxValue; publicBadWordsFilter() { } //初始化关键字 publicvoidInit(DataTablebadwords) { for(intj=0;j<badwords.Rows.Count;j++) { stringword=badwords.Rows[j][0].ToString(); maxWordLength=Math.Max(maxWordLength,word.Length); minWordLength=Math.Min(minWordLength,word.Length); for(inti=0;i<7&&i<word.Length;i++) { fastCheck[word[i]]|=(byte)(1<<i); } for(inti=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); } } } publicstringFilter(stringtext,stringmask) { thrownewNotImplementedException(); } //检查是否有关键字 publicboolHasBadWord(stringtext) { intindex=0; while(index<text.Length) { intcount=1; if(index>0||(fastCheck[text[index]]&1)==0) { while(index<text.Length-1&&(fastCheck[text[++index]]&1)==0); } charbegin=text[index]; if(minWordLength==1&&charCheck[begin]) { returntrue; } for(intj=1;j<=Math.Min(maxWordLength,text.Length-index-1);j++) { charcurrent=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]) { stringsub=text.Substring(index,j+1); if(hash.Contains(sub)) { returntrue; } } } } index+=count; } returnfalse; } } }
引用:
stringsql="selectkeywordsfromtb_keyword"; BadWordsFilterbadwordfilter=newBadWordsFilter(); //初始化关键字 badwordfilter.Init(oEtb.GetDataSet(sql).Tables[0]); //检查是否有存在关键字 boola=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.netajax技巧总结专题》及《asp.net缓存操作技巧总结》。
希望本文所述对大家asp.net程序设计有所帮助。