过滤指定词

现在大多数管理系统/网站 都会用到一个功能模块《关键词过滤》,没有好像就显得你不专业似的大笑,因为项目中也需要所以就写了一个简单的算法,记录一下他的实现原理(代码中不写过多的注释了,单独体现在小标题上)

核心概念把传递过来的数据解析,与指定的词语比对

理解以后就是这么简单尴尬

1.如果每一次都需要单独请求数据库会造成访问量过大对服务器的负担也是较大的,所以只会在第一次加载时发送请求,并将数据放到localStroage中去

// 敏感词存储变量
var sensitveWords;
if(localStorage.getItem("sensitiveWords")){
	sensitveWords = eval("("+localStorage.getItem("sensitiveWords")+")");
}
init();
function init(){
	if(!localStorage.getItem("sensitiveWords")){
		//初次请求数据
			$.ajax({
				type:"POST",
				cache: true,
				url:tc+"getMgch",
				data:{
					dqy:1,shownum:1000000,like:''
				},
				success:function(msg){
					if(msg!="" && msg!="[]" && msg!= null){
						console.log("向 sensitveWords 中填充数据!");
						var arr = msg.split("=");
						sensitveWords=eval("("+arr[0]+")");
						localStorage.setItem("sensitiveWords",arr[0]);
					}
				},
				error:function(){
				}
			});
		}else{
			console.log("sensitveWords 中已有数据,不在重复加载!")
		}
}

2.到了这就需要走方法来实现过滤了,网上也有相关的操作,但是作为一个程序员像这种自己能完成实现的还是比较喜欢自己去写更扎实(虽然写完时间长也忘)两部分是实现功能的全部代码,最初的时候把这个功能复杂的实现了,但是发现一点改一点,这就是最终的实现了,可以看到其实三个方法最终走的都是一个,其实就是在解析传递过来的数据格式,并根据需求返回相应数据格式

//判断  json
function contains(json){
	if(json.substr(0,1) == "["){
		json = json;
	}else{
		json = "["+json+"]";
	}

	var obj =eval("("+json+")");
	for(var index in obj){
		for(var o in obj[index]){
			obj[index][o] = containsStr(obj[index][o]);
		}
	}
	return JSON.stringify(obj);;
}

//判断  str
function containsStr(str){
	for(var j =0; j<sensitveWords.length; j++){
		if(str){
			
			for(var i =0; i<sensitveWords.length; i++){
				if(str.toString().indexOf(sensitveWords[j].mgcmc) !=-1){
					 var xing = dz(sensitveWords[j].mgcmc);
					 str = str.replace(sensitveWords[j].mgcmc,xing)
					 var id = sensitveWords[j].id;
					 var tjsj = sensitveWords[j].tjsj;
					 var glcs = getGlcs(id)+1;
					 var mgc = sensitveWords[j].mgcmc;
					 superMgcSave(id,tjsj,glcs,mgc);
				}
			}
		}
	}
	return str;
}

//保存 过滤
function containsBC(json){
	if(json.substr(0,1) == "["){
		json = json;
	}else{
		json = "["+json+"]";
	}
	var obj =eval("("+json+")");
	for(var index in obj){
		for(var o in obj[index]){
			obj[index][o] = containsStr(obj[index][o]);
		}
	}
	return JSON.stringify(obj).substr(1,json.length-2);
}

function superMgcSave(id,tjsj,glcs,mgc){
	json="{'id':'"+id+"','mgcmc':'"+mgc+"','tjsj':'"+tjsj+"','glcs':'"+glcs+"','sfsc':'0'}";
	
	$.ajax({
		type:"POST",
		async:false,
		url:tc+"bcMgch",
		data:{
			json:json,localcookies:document.cookie.match(new RegExp("(^| )userInfoCookies=([^;]*)(;|$)")) == null ? "":
				unescape(document.cookie.match(new RegExp("(^| )userInfoCookies=([^;]*)(;|$)"))[2])
		},success:function(msg){
			if(msg=="ok"){
				console.log("过滤次数修改成功!")
			}else{
				console.log("过滤次数修改失败,原因:"+msg)
			}
		},error:function(){
			console.log("过滤次数修改:网络异常")
		}
	})
}

function getGlcs(id){
	var glcs = "";
	$.ajax({
		url:tc+"getMgchById",
		type:"POST",
		async:false,
		data:{
			id:id
		},success:function(msg){
			if(msg !="" && msg !=null && msg !="[]"){
				reList=eval("("+msg+")");
				
				 glcs = reList.glcs;
			}
		}
	});
	return glcs;
}
//递增 * 号
function dz(val){
	var reStr="";
	for (var j = 0; j < val.length; j++) {
		reStr+='*'
	}
	return reStr;
}
function getWords(){
	if(sensitveWords){
		return sensitveWords;
	}else{
		init();
		return sensitveWords;
	}
}

以上就是过滤功能的实现,欢迎看过文章的朋友多多指教,一起学习,进步

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanpengfeil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值