当前位置:首页 > JavaScript

js实现关键字过滤

2026-01-31 05:21:58JavaScript

实现关键字过滤的基本方法

使用正则表达式进行关键字匹配是最常见的方法。通过构建一个包含敏感词的正则表达式,可以对输入文本进行检测或替换。

const sensitiveWords = ['bad', 'forbidden', 'inappropriate'];
const regex = new RegExp(sensitiveWords.join('|'), 'gi');

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

优化匹配效率的方法

对于大量敏感词的情况,可以考虑使用Trie树(字典树)数据结构来优化匹配效率。这种方法特别适合需要处理成千上万个敏感词的场景。

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

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

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

处理变体字符的过滤

某些情况下需要处理变体字符或同义词,可以通过扩展敏感词列表或使用模糊匹配来实现。

const variantMap = {
  'a': ['@', '4'],
  'e': ['3'],
  'i': ['1', '!']
};

function expandVariants(word) {
  // 实现变体字符扩展逻辑
}

实现整词匹配而非部分匹配

确保只匹配完整单词而非部分字符,可以在正则表达式中添加单词边界匹配。

const regex = new RegExp('\\b(' + sensitiveWords.join('|') + ')\\b', 'gi');

前端实现的注意事项

在前端实现时需要考虑性能影响,特别是对长文本的处理。可以采用以下策略:

  • 对输入进行分块处理
  • 使用Web Worker进行后台过滤
  • 实现延迟过滤(如防抖处理)
// 使用防抖的过滤函数
let filterTimeout;
function debouncedFilter(text, callback) {
  clearTimeout(filterTimeout);
  filterTimeout = setTimeout(() => {
    callback(filterText(text));
  }, 300);
}

后端验证的必要性

尽管前端可以实现关键字过滤,但必须同时在后端进行验证。前端过滤容易被绕过,后端验证是确保数据安全的最后防线。

js实现关键字过滤

// Node.js后端过滤示例
app.post('/submit', (req, res) => {
  const filteredContent = filterText(req.body.content);
  if (filteredContent !== req.body.content) {
    return res.status(400).send('包含敏感内容');
  }
  // 处理合法内容
});

标签: 关键字js
分享给朋友:

相关文章

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…