Files
simple-memo/utils/sensitive.go
T
sunct 3c3bf53ae4 docs(website): 添加简记memo产品原型和UI设计规范文档
- 新增「简记memo」一体化小程序产品原型设计文档
- 新增简记memo完整版UI视觉设计规范和界面细节
- 添加IDEA项目配置文件.gitignore
- 创建404页面HTML文件,包含响应式布局和错误提示
- 添加关于页面HTML文件,展示品牌介绍和团队信息
- 实现AES加解密工具函数,支持请求体加密
- 添加用户协议页面基础框架
2026-07-31 14:12:32 +08:00

111 lines
2.5 KiB
Go

// utils/sensitive.go
// 敏感词过滤工具
package utils
import (
"embed"
"strings"
"sync"
"github.com/importcjj/sensitive"
)
//go:embed sensitive_words.txt
var sensitiveWordsFS embed.FS
var (
filter *sensitive.Filter
filterOnce sync.Once
)
// GetSensitiveFilter 获取敏感词过滤器单例
func GetSensitiveFilter() *sensitive.Filter {
filterOnce.Do(func() {
filter = sensitive.New()
loadDefaultWords()
})
return filter
}
// loadDefaultWords 加载默认敏感词库
func loadDefaultWords() {
// 从嵌入的文件系统读取
data, err := sensitiveWordsFS.ReadFile("sensitive_words.txt")
if err != nil {
// 如果文件不存在,使用内置的基础词库
loadBuiltinWords()
return
}
words := strings.Split(string(data), "\n")
for _, word := range words {
word = strings.TrimSpace(word)
if word != "" && !strings.HasPrefix(word, "#") {
filter.AddWord(word)
}
}
}
// loadBuiltinWords 加载内置基础敏感词
func loadBuiltinWords() {
// 基硎敏感词列表
builtinWords := []string{
// 政治相关
"习近平", "江泽民", "胡锦涛", "温家宝", "李克强",
"法轮功", "六四", "天安门", "台独", "藏独", "疆独",
// 色情相关
"色情", "黄色", "裸体", "做爱", "性交", "强奸", "乱伦",
// 暴力相关
"杀人", "自杀", "爆炸", "恐怖", "炸弹", "袭击",
// 赌博相关
"赌博", "赌钱", "博彩", "六合彩",
// 毒品相关
"毒品", "吸毒", "贩毒", "冰毒", "海洛因",
// 侮辱性词汇
"傻逼", "操你", "妈的", "王八蛋", "畜生",
}
for _, word := range builtinWords {
filter.AddWord(word)
}
}
// FilterSensitive 过滤敏感词,替换为 *
func FilterSensitive(text string) string {
f := GetSensitiveFilter()
return f.Replace(text, '*')
}
// ContainsSensitive 检查是否包含敏感词
func ContainsSensitive(text string) bool {
f := GetSensitiveFilter()
has, _ := f.FindIn(text)
return has
}
// FindAllSensitive 查找所有敏感词
func FindAllSensitive(text string) []string {
f := GetSensitiveFilter()
return f.FindAll(text)
}
// ValidateContent 验证内容,返回是否通过和第一个敏感词
func ValidateContent(text string) (bool, string) {
f := GetSensitiveFilter()
return f.Validate(text)
}
// AddSensitiveWord 动态添加敏感词
func AddSensitiveWord(word string) {
f := GetSensitiveFilter()
f.AddWord(word)
}
// AddSensitiveWords 批量添加敏感词
func AddSensitiveWords(words []string) {
f := GetSensitiveFilter()
for _, word := range words {
f.AddWord(word)
}
}