var filterWord={
words:"",
tblRoot:{},
//敏感词文件
file:"sensitiveWords.txt", //载入敏感词组
load:function (file,callback) {
file=file||this.file;
var objHttp;
if (window.ActiveXObject) {
objHttp = new ActiveXObject("Microsoft.XMLHTTP");
}else {
objHttp = new XMLHttpRequest();
objHttp.overrideMimeType("text/xml");
} objHttp.onreadystatechange = function () {
if (objHttp.readyState != 4)
return;
this.words = objHttp.responseText;
callback(objHttp.responseText);
}; objHttp.open("GET", file, true);
objHttp.send(null);
}, //将关键字生成一颗树
makeTree:function (callback) {
if(this.words==""){
this.load(this.file,function (words) {
var strKeys = words;
var arrKeys = strKeys.split("");
var tblCur = this.tblRoot = {};
var key; for (var i = 0, n = arrKeys.length; i < n; i++) {
key = arrKeys[i];
//完成当前关键字
if (key == ';'){
tblCur.end = true;
tblCur = this.tblRoot;
continue;
}
//生成子节点
if (key in tblCur)
tblCur = tblCur[key];
else
tblCur = tblCur[key] = {};
} //最后一个关键字没有分割符
tblCur.end = true;
callback(this.tblRoot);
});
}else{
callback(this.tblRoot);
}
}, //标记出内容中敏感词的位置
searchWords:function (content,root) {
var tblCur,p, v,i = 0,arrMatch = [];
var n = content.length;
while (i < n) {
tblCur = root;
p = i;
v = 0; for (; ;) {
if (!(tblCur = tblCur[content.charAt(p++)])) {
i++;
break;
}
//找到匹配敏感字
if (tblCur.end)
v = p;
}
//最大匹配
if (v){
arrMatch.push(i - 1, v);
i = v;
}
}
return arrMatch;
}, //标记敏感字
handle:function (strContent) {
var mid,arrMatch,strHTML,arrHTML = [],p = 0;
this.makeTree(function (data) {
arrMatch = filterWord.searchWords(strContent,data);
for (var i = 0, n = arrMatch.length; i < n; i += 2) {
mid = arrMatch[i];
arrHTML.push(strContent.substring(p, mid),
"<em>",
strContent.substring(mid, p = arrMatch[i + 1]),
"</em>");
}
arrHTML.push(strContent.substring(p)); strHTML = arrHTML.join("").replace(/\n/g, "<br>");
console.log(strHTML);
});
}
};

使用方式:

filterWord.handle("徐航撒飒飒阿萨飒飒刘孝朋啊啊撒飒飒")

js敏感词过滤的更多相关文章

  1. js 敏感词过滤

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  2. 敏感词过滤,js封装class选择器:

    敏感词过滤: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  3. Jsp敏感词过滤

    Jsp敏感词过滤 大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向(或反执政党倾向).暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实 ...

  4. 基于DFA算法、RegExp对象和vee-validate实现前端敏感词过滤

    面临敏感词过滤的问题,最简单的方案就是对要检测的文本,遍历所有敏感词,逐个检测输入的文本是否包含指定的敏感词. 很明显上面这种实现方法的检测时间会随着敏感词库数量的增加而线性增加.系统会因此面临性能和 ...

  5. java实现敏感词过滤(DFA算法)

    小Alan在最近的开发中遇到了敏感词过滤,便去网上查阅了很多敏感词过滤的资料,在这里也和大家分享一下自己的理解. 敏感词过滤应该是不用给大家过多的解释吧?讲白了就是你在项目中输入某些字(比如输入xxo ...

  6. 用php实现一个敏感词过滤功能

    周末空余时间撸了一个敏感词过滤功能,下边记录下实现过程. 敏感词,一方面是你懂的,另一方面是我们自己可能也要过滤一些人身攻击或者广告信息等,具体词库可以google下,有很多. 过滤敏感词,使用简单的 ...

  7. 浅析敏感词过滤算法(C++)

    为了提高查找效率,这里将敏感词用树形结构存储,每个节点有一个map成员,其映射关系为一个string对应一个TreeNode. STL::map是按照operator<比较判断元素是否相同,以及 ...

  8. Java实现敏感词过滤

    敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...

  9. php敏感词过滤

    在项目开发中发现有个同事在做敏感词过滤的时候用循环在判断,其实是不用这样做的,用php的数组函数和字符串函数即可实现 function filterNGWords($string) { $badwor ...

随机推荐

  1. Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算(转)

    Java 系统性能分析 命令 1. cpu分析 top , pidstat(sysstat) pid -p PID -t 1 10 vmstat 1 CPU上下文切换.运行队列.利用率 ps Hh - ...

  2. poj 2288 Islands and Bridges

    题意: 给你一个双向连通图,求 获得权值最大 的 哈密顿通路的 权值 和 这个权值对应的数目: 其中权值计算方法是  列如 ABCD  权值是a+b+c+d+ab+bc+cd 如果 A,B,C  和B ...

  3. 完全背包(南阳oj311)(完全背包)

    全然背包 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 直接说题意,全然背包定义有N种物品和一个容量为V的背包.每种物品都有无限件可用. 第i种物品的体积是c.价值 ...

  4. ASP.NET自定义控件组件开发 第一章 第二篇 接着待续

    原文:ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 很感谢大家给我的第一篇ASP.NET控件开发的支持!在写这些之前,我也看了 ...

  5. paip.jdk1.4 1.5(5.0) 1.6(6.0) 7.0 8.0特点比较与不同

    paip.jdk1.4 1.5(5.0)  1.6(6.0) 7.0   8.0特点比较与不同 作者Attilax ,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地 ...

  6. linux内核数据包转发流程(三)网卡帧接收分析

    [版权声明:转载请保留出处:blog.csdn.net/gentleliu.邮箱:shallnew*163.com] 每一个cpu都有队列来处理接收到的帧,都有其数据结构来处理入口和出口流量,因此,不 ...

  7. SQL_substr功能测试

    原创作品.从 "深蓝blog" 博客,欢迎转载,请务必注明转载的来源.权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/articl ...

  8. system strategies of Resources Deadlock

    In computer science, Deadlock is a naughty boy aroused by compete for resources. Even now,     there ...

  9. C++ 堆 和 堆 分析

    [摘要] 堆和栈,即是数据结构,又是分配存储空间的不同方式.在数据结构上.堆是树型层次结构,结点按keyword次序排列,经常使用的堆为二叉堆:栈是一种先进后出的数据结构.在内存分配上的堆和栈,首要差 ...

  10. 采用WindowManager添加您自己的自定义视图

    原文地址:使用WindowManager加入自己定义视图 在写手机卫士的时候,用户拨打|接听电话须要显示号码归属地,然后出现了一些异常.在此留下记号,希望对麻友们有帮助: BUG教程 在使用 view ...