package data import ( "regexp" "strings" clog "github.com/cherry-game/cherry/logger" ) const ( maskReplaceWord string = "***" // 屏蔽字替换 newlineReplaceWord string = "" // 换行符替换 ) var ( newlineRe = regexp.MustCompile(`[\r\n]+`) // 换行符 maskWordRegMap map[int32]*regexp.Regexp // 正则表达式 ) func (p *maskWordConfig) OnAfterLoad(_ bool) { loadMaps := map[int32]*regexp.Regexp{} for _, row := range p.list { row.Word = strings.TrimSpace(row.Word) // // 去掉开头是*号的 // // **替换为* // // |*改成| // // *|改成| // // ?|改成| // // \|改为| // // 中间的\换成\\ // // 最后一个是\去掉 // row.Word = strings.TrimLeft(row.Word, "*") // row.Word = strings.ReplaceAll(row.Word, "**", "*") // row.Word = strings.ReplaceAll(row.Word, "|*", "|") // row.Word = strings.ReplaceAll(row.Word, "*|", "|") // row.Word = strings.ReplaceAll(row.Word, "?|", "|") // row.Word = strings.ReplaceAll(row.Word, "\\|", "|") // row.Word = strings.ReplaceAll(row.Word, "\\", "\\\\") // row.Word = strings.TrimRight(row.Word, "\\") reg := regexp.MustCompile(row.Word) if reg == nil { clog.Errorf("maskWordConfig regexp.MustCompile fail id:%d", row.ID) continue } loadMaps[row.ID] = reg } maskWordRegMap = loadMaps } func (p *maskWordConfig) Check(checkWord string) bool { if !Const.MaskWordIsCheck { return false } for _, reg := range maskWordRegMap { if reg.MatchString(checkWord) { return true } } return false } func (p *maskWordConfig) Replace(word string) string { // 换行符替换为 "" word = newlineRe.ReplaceAllString(word, newlineReplaceWord) if !Const.MaskWordIsCheck { return word } for _, reg := range maskWordRegMap { word = reg.ReplaceAllString(word, maskReplaceWord) } return word }