extend_mask_word.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package data
  2. import (
  3. "regexp"
  4. "strings"
  5. clog "github.com/cherry-game/cherry/logger"
  6. )
  7. const (
  8. maskReplaceWord string = "***" // 屏蔽字替换
  9. newlineReplaceWord string = "" // 换行符替换
  10. )
  11. var (
  12. newlineRe = regexp.MustCompile(`[\r\n]+`) // 换行符
  13. maskWordRegMap map[int32]*regexp.Regexp // 正则表达式
  14. )
  15. func (p *maskWordConfig) OnAfterLoad(_ bool) {
  16. loadMaps := map[int32]*regexp.Regexp{}
  17. for _, row := range p.list {
  18. row.Word = strings.TrimSpace(row.Word)
  19. // // 去掉开头是*号的
  20. // // **替换为*
  21. // // |*改成|
  22. // // *|改成|
  23. // // ?|改成|
  24. // // \|改为|
  25. // // 中间的\换成\\
  26. // // 最后一个是\去掉
  27. // row.Word = strings.TrimLeft(row.Word, "*")
  28. // row.Word = strings.ReplaceAll(row.Word, "**", "*")
  29. // row.Word = strings.ReplaceAll(row.Word, "|*", "|")
  30. // row.Word = strings.ReplaceAll(row.Word, "*|", "|")
  31. // row.Word = strings.ReplaceAll(row.Word, "?|", "|")
  32. // row.Word = strings.ReplaceAll(row.Word, "\\|", "|")
  33. // row.Word = strings.ReplaceAll(row.Word, "\\", "\\\\")
  34. // row.Word = strings.TrimRight(row.Word, "\\")
  35. reg := regexp.MustCompile(row.Word)
  36. if reg == nil {
  37. clog.Errorf("maskWordConfig regexp.MustCompile fail id:%d", row.ID)
  38. continue
  39. }
  40. loadMaps[row.ID] = reg
  41. }
  42. maskWordRegMap = loadMaps
  43. }
  44. func (p *maskWordConfig) Check(checkWord string) bool {
  45. if !Const.MaskWordIsCheck {
  46. return false
  47. }
  48. for _, reg := range maskWordRegMap {
  49. if reg.MatchString(checkWord) {
  50. return true
  51. }
  52. }
  53. return false
  54. }
  55. func (p *maskWordConfig) Replace(word string) string {
  56. // 换行符替换为 ""
  57. word = newlineRe.ReplaceAllString(word, newlineReplaceWord)
  58. if !Const.MaskWordIsCheck {
  59. return word
  60. }
  61. for _, reg := range maskWordRegMap {
  62. word = reg.ReplaceAllString(word, maskReplaceWord)
  63. }
  64. return word
  65. }