1. 程式人生 > >ASP 通過正則表示式過濾敏感詞

ASP 通過正則表示式過濾敏感詞

        /// <summary>
        /// 判斷使用者的評論中是否有禁用詞
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public bool CheckForbid(string msg)
        {
            List<string> list = dal.GetForbidWord();//獲取所有的禁用詞 (也可以放入快取中)。
            string regex = string.Join("|",list.ToArray());   //aa|bb|cc|dd   正好拼接成正則表示式字串
            return Regex.IsMatch(msg, regex);   //通過正則表示式判斷是否包含禁用詞。
            //foreach (string word in list)
            //{
            //    msg.Contains(word);   //Contains函式內部也是一個迴圈,所以時間複雜度高,不建議使用foreach函式,而是使用正則表示式。
            //    break;
            //}

        }
        /// <summary>
        /// 審查詞過濾
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public bool CheckMod(string msg)
        {

            List<string> list = dal.GetModWord();//獲取所有的審查詞 (也可以放入快取中)。
            string regex = string.Join("|", list.ToArray());  //aa|bb|cc|dd
            regex = regex.Replace(@"\", @"\\").Replace("{2}",@".{0,2}");  //replace對正則表示式字串作進一步處理。{0,2}表示0到2個字元。
            return Regex.IsMatch(msg, regex);
        }
        /// <summary>
        /// 替換詞過濾
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public string CheckReplace(string msg)
        {
            List<Model.Articel_Words> list = dal.GetReplaceWord();  //(可以放入快取中)
            foreach (Model.Articel_Words model in list)
            {
                msg = msg.Replace(model.WordPattern, model.ReplaceWord);  //將敏感詞替換成對應詞。
            }
            return msg;
        }