当前位置:首页 > JavaScript

js实现敏感词过滤

2026-03-01 19:02:42JavaScript

敏感词过滤的实现方法

敏感词过滤是Web开发中常见的需求,可以通过多种方式在JavaScript中实现。以下是几种常用方法:

正则表达式匹配

使用正则表达式可以快速检测文本中是否包含敏感词。需要预先定义敏感词列表,并将其转换为正则表达式模式。

const sensitiveWords = ['badword1', 'badword2', 'badword3'];
const pattern = new RegExp(sensitiveWords.join('|'), 'gi');

function filterText(text) {
    return text.replace(pattern, '*');
}

字典树(Trie)算法

对于大量敏感词,字典树是更高效的解决方案。它通过树形结构存储敏感词,减少重复匹配。

class TrieNode {
    constructor() {
        this.children = {};
        this.isEnd = false;
    }
}

class Trie {
    constructor() {
        this.root = new TrieNode();
    }

    insert(word) {
        let node = this.root;
        for (const ch of word) {
            if (!node.children[ch]) {
                node.children[ch] = new TrieNode();
            }
            node = node.children[ch];
        }
        node.isEnd = true;
    }

    search(word) {
        let node = this.root;
        for (const ch of word) {
            if (!node.children[ch]) {
                return false;
            }
            node = node.children[ch];
        }
        return node.isEnd;
    }
}

function buildTrie(sensitiveWords) {
    const trie = new Trie();
    sensitiveWords.forEach(word => trie.insert(word));
    return trie;
}

基于哈希表的快速查找

对于中小型敏感词库,可以使用简单的哈希表实现快速查找。

const sensitiveWords = new Set(['badword1', 'badword2', 'badword3']);

function hasSensitiveWord(text) {
    const words = text.split(/\s+/);
    return words.some(word => sensitiveWords.has(word.toLowerCase()));
}

结合多种方法的混合实现

实际应用中,通常会结合多种方法以提高过滤效果和性能。

js实现敏感词过滤

function createWordFilter(sensitiveWords) {
    const trie = buildTrie(sensitiveWords);
    const regex = new RegExp(sensitiveWords.join('|'), 'gi');

    return {
        filter: function(text) {
            // 先用正则快速过滤
            let filtered = text.replace(regex, '*');

            // 对剩余内容进行更精确的Trie检查
            const words = filtered.split(/\s+/);
            return words.map(word => {
                return trie.search(word.toLowerCase()) ? '*' : word;
            }).join(' ');
        }
    };
}

性能优化建议

  • 敏感词列表应该预先加载并缓存,避免每次过滤都重新构建
  • 对于大规模文本,可以考虑分批处理
  • 使用Web Worker处理大量文本,避免阻塞主线程
  • 定期更新敏感词库,保持过滤效果

以上方法可以根据实际需求选择或组合使用,平衡性能与准确性。对于特别严格的过滤需求,可能需要考虑服务端实现或专门的过滤服务。

标签: 敏感js
分享给朋友:

相关文章

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…