asp.net 脏字典过滤问题 用正则表达式来过滤脏数据_实用技巧

方法一:使用正则表达式

复制代码 代码如下:

//脏字典数据存放文件路径
private static string FILE_NAME="zang.txt";
//脏数据字典表,如:脏数据一|脏数据二|脏数据三
public static string dirtyStr="";

public ValidDirty()
{
if (HttpRuntime.Cache["Regex"]==null)
{
dirtyStr=ReadDic();
//用于检测脏字典的正则表达式
Regex validateReg= new Regex("^((?!"+dirtyStr+").(?<!"+dirtyStr+"))*$",RegexOptions.Compiled|RegexOptions.ExplicitCapture);
HttpRuntime.Cache.Insert("Regex" ,validateReg,null,DateTime.Now.AddMinutes(20) ,TimeSpan.Zero);
}

}
private string ReadDic()
{
FILE_NAME=Environment.CurrentDirectory+"\\"+FILE_NAME;

if (!File.Exists(FILE_NAME))
{
Console.WriteLine("{0} does not exist.", FILE_NAME);
return "";
}
StreamReader sr = File.OpenText(FILE_NAME);
String input="";
while (sr.Peek() > -1)
{
input += sr.ReadLine() ;
}

sr.Close();
return input;

}

public bool ValidByReg(string str)
{
Regex reg=(Regex)HttpRuntime.Cache["Regex"];
return reg.IsMatch(str) ;

}

感觉这种方法的执行效率不是很高,简单的测试了一下 1000字的文章,脏字典有800多个关键字
式了一下是 1.238秒,大家有没有更好的方法,请不吝赐教!

方法二:普通循环查找方法

复制代码 代码如下:

public bool ValidGeneral(string str)
{

if(!File.Exists(FILE_NAME))
{
Console.WriteLine("文件路径或者文件路径不存在错误信息") ;
return false;
}
else
{
StreamReader objReader = new StreamReader(FILE_NAME,System.Text.Encoding.GetEncoding("gb2312"));
string sLine="";
ArrayList arrText = new ArrayList();

while (sLine != null)
{
sLine = objReader.ReadLine();
if (sLine != null)
arrText.Add(sLine);

}
objReader.Close();

foreach (string sOutput in arrText)
{
string[] strArr=sOutput.Split('|');

for (int i = 0; i < strArr.Length; i++)
{
if (str.IndexOf(strArr[i])!=-1)
{
return false;
}

}

}
return true;

}

}

以下是测试的方法,有什么问题还大家请指出!

复制代码 代码如下:

DateTime t1 =DateTime.Now;
string str="213";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
ValidDirty vd=new ValidDirty() ;
Console.WriteLine(vd.ValidByReg(str)) ;
DateTime t2 =DateTime.Now;
TimeSpan ts=t2-t1;
Console.WriteLine(ts.TotalMilliseconds) ;
Console.Read() ;


算法


检索文本文件长度 / 耗费时间(ms)


正则算法


10个汉字/ 980


100个汉字/999


1000个汉字/1234


普通算法


10个汉字/ 234


100个汉字/234


1000个汉字/265

脏字典下载
不过这篇文章有可能有一些问题,建议看下下面2篇文章再决定使用。

时间: 2024-08-03 04:27:03

asp.net 脏字典过滤问题 用正则表达式来过滤脏数据_实用技巧的相关文章

ASP.NET中Validation验证控件正则表达式特殊符号的说明_实用技巧

RegularExpressionValidator控件表达式说明: 方括号"[ ]"用与定义可接受的字符.[abc123] 表示控件只能接受 a,b,c,1,2,3 这6个字符: 反集合符号 " ^ "用于定义不可以接受的字符.[^a-h] 表示控件除了 a 到 h 8个字符外,都可以接受: 花括号"{ }"定义必须输入的字符个数.{6}表示只能输入6个字符 : {6,}表示必须输入6个以上,无上限 : {2,6} 表示必须输入2至6个字符:但

ASP.NET中使用开源组件NPOI快速导入导出Execl数据_实用技巧

相信很多童鞋都开发过Execl的导入导出功能,最近产品中无论是后台数据分析的需要,还是前端满足用户管理的方便,都有Execl导入导出的维护需求产生. 以前做这个功能,如果是web,利用HttpContext.Current.Response.ContentType ="application/ms-excel";就可以导出html数据表格到execl中,这种方法的问题就是编码格式的兼容性太差,用Mac OS之类的 office打开直接乱码给你看.或者是调用office的COM组件,或宏

ASP.NET表单验证方法详解第1/2页_实用技巧

1.使用验证控件 这属于客户端验证,微软开发人员将最常用的验证功能进行了封装,使得我们开发效率明显提高,而且特别是自定义验证控件,非常灵活,我们可以自行设计验证逻辑.但是验证控件收到了浏览器的限制,记得在一次开发过程中,使用FireFox浏览器进行浏览,发现所有的验证控件失灵,这个并非是ASP.NET设计的漏洞,只能说浏览器标准的不唯一造成的. ASP.NET公有六种验证控件,分别如下: RequiredFieldValidator(必须字段验证) 用于检查是否有输入值 CompareValid

解决Asp.net Mvc返回JsonResult中DateTime类型数据格式问题的方法_实用技巧

问题背景:            在使用asp.net mvc 结合jquery esayui做一个系统,但是在使用使用this.json方法直接返回一个json对象,在列表中显示时发现datetime类型的数据在转为字符串是它默认转为Date(84923838332223)的格式,在经过查资料发现使用前端来解决这个问题的方法不少,但是我又发现在使用jquery easyui时,加载列表数据又不能对数据进行拦截,进行数据格式转换之后再加载,后来发现可以通过自定义JsonResult实现,认为这种

详解ASP.NET MVC下的异步Action的定义和执行原理_实用技巧

Visual Studio提供的Controller创建向导默认为我们创建一个继承自抽象类Controller的Controller类型,这样的Controller只能定义同步Action方法.如果我们需要定义异步Action方法,必须继承抽象类AsyncController.这篇问你讲述两种不同的异步Action的定义方法和底层执行原理. 一.基于线程池的请求处理 ASP.NET通过线程池的机制处理并发的HTTP请求.一个Web应用内部维护着一个线程池,当探测到抵达的针对本应用的请求时,会从池

Asp.Net MVC3.0如何项目部署到Win7 64位系统_实用技巧

之前一直是通过Visual Studio直接F5来运行自己编写的项目或者小程序,很少通过部署发布到IIS上面,于是自己便在自己的笔记本上进行测试,结果还真是发现了不少问题,于是自己重新通过虚机程序进行全裸的新一次部署实践.部署进程第一步:现在Win7 64位操作系统上安装IIS,通过控制面板位置即可开启安装.如下图所示: 勾选后点击确定进行安装即可.第二步:IIS安装成功后,因为我的程序是通过VS2010开发的,而且是Asp.Net MVC3.0的程序,而且我的Win7 64位虚机也是新安装的,

asp.net继承IHttpHandler接口实现给网站图片添加水印功能实例_实用技巧

本文实例讲述了asp.net继承IHttpHandler接口实现给网站图片添加水印功能.分享给大家供大家参考,具体如下: 先展示图片效果: 1. 在App_Code下添加类文件,命名为ImageSY 文件内容如下 public class ImageSY : IHttpHandler { public ImageSY() { // //TODO: 在此处添加构造函数逻辑 // } #region IHttpHandler 成员 public bool IsReusable { get { ret

asp.net 页面转向 Response.Redirect, Server.Transfer, Server.Execute的区别_实用技巧

Response.Redirect 简单地发送一条消息到浏览器,告诉浏览器定位到另一个页面.你可以使用下面的代码将用户引导到另一个页面: Response.Redirect("WebForm2.aspx") 或者 Response.Redirect("http://www.cnnas.com/") Server.Transfer 也是通过一条语句将用户引导到另一页面,比如:Server.Transfer("WebForm2.aspx").不过,这

asp.net用url重写URLReWriter实现任意二级域名 高级篇_实用技巧

 我最近写了个小例子,大家可以先看这个,里面有小例子的完整代码下载 http://www.jb51.net/article/20906.htm 好久没有写技术文章,如果大家看不明白,就多看几篇,汗,或者,在文章的后面回复(这是最有效的办法),我会尽力帮助大家解答疑惑. 来找这篇文章的,应该都知道什么叫二级域名吧,废话就不说了.但是讨论前,先要明白一个思想问题.很多朋友一直考虑不清(我前几天也一直搞不明白)的问题是,我键入一个地址后,怎么这个url就被重写了?第一步:在浏览器键入了一个地址,比如h