针对String的操作类

 public static class StringHelper
    {
        /// <summary>
        /// 返回缩略图路径
        /// </summary>
        /// <param name="filePath">原图路径</param>
        /// <param name="width">缩略图宽</param>
        /// <param name="height">缩略图高</param>
        /// <returns></returns>
        public static string GetThumbSize(string filePath, int width, int height)
        {
            if (!string.IsNullOrEmpty(filePath))
            {
                if (filePath.ToLower().Contains("http"))
                {
                    return filePath;
                }
                var match = Regex.Match(filePath, @"(\S+)\.([gif|bmp|jpg|jpeg|png]+)", RegexOptions.IgnoreCase);
                return string.Format("{0}_{1}_{2}.{3}", match.Groups[1].Value, width, height, match.Groups[2].Value);
            }
            return string.Empty;
        }

        /// <summary>
        /// 必须为数字 
        /// </summary>
        /// <param name="strNum"></param>
        /// <returns></returns>
        public static bool IsNum(string strNum)
        {
            return strNum != null && Regex.IsMatch(strNum, @"^(-)?[0-9]+$");
        }

        /// <summary>
        /// 此方法用于判断是否存在特殊字符
        /// </summary>
        /// <param name="strNum">要验证的内容</param>
        /// <returns></returns>
        public static bool IsExistsSpecialChar(string strNum)
        {
            return !(strNum != null && Regex.IsMatch(strNum, @"^[A-Za-z0-9\u4e00-\u9fa5]+$"));
        }

        /// <summary>
        /// 验证只能输入汉子或字母
        /// </summary>
        /// <param name="strNum">要验证的内容</param>
        /// <returns></returns>
        public static bool IsExistsCharOrNum(string strNum)
        {
            return !(strNum != null && Regex.IsMatch(strNum, @"^[A-Za-z\u4e00-\u9fa5]+$"));
        }

        /// <summary>
        /// 验证昵称(不能重复,2-16位字符,包括字母、数字、下划线或中文)
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static bool IsExistsCharOrLetterOrNumOrUnderline(string str)
        {
            return !(str != null && Regex.IsMatch(str, @"^[_\u4E00-\u9FA5a-zA-Z0-9]{2,16}$"));
        }

        /// <summary>
        /// 验证名称(4-10位,中文、字母,中文占2位)
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static bool IsExistsCharOrLetterOrNum(string str)
        {
            return !(str != null && Regex.IsMatch(str, @"^[\u4E00-\u9FA5a-zA-Z]{4,10}$"));
        }

        /// <summary>
        /// 证密码格式(密码由6-16位数字、字母、或下划线组成,区分全角/半角,字母区分大小写)
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static bool IsExistsLetterOrNumOrUnderline(string str)
        {
            return !(str != null && Regex.IsMatch(str, @"^[_a-zA-Z0-9]{6,16}$"));
        }

        /// <summary>
        /// 验证IP地址
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static bool IsIp(string str)
        {
            return !(str != null && Regex.IsMatch(str, @"\b(([01]?\d?\d|2[0-4]\d|25[0-5])\.){3}([01]?\d?\d|2[0-4]\d|25[0-5])\b"));
        }

        /// <summary>
        /// 截字符串
        /// </summary>
        /// <param name="content">字符串</param>
        /// <param name="length">截几个字(两个字符 = 一个中文字)</param>
        /// <param name="isFilterHtml">是否需要过滤掉HTML标签</param>
        /// <param name="isFlag">是否追加...</param>
        /// <returns>截好的字符串</returns>
        public static string CutStr(string content, int length, bool isFilterHtml, bool isFlag = true)
        {
            if (string.IsNullOrEmpty(content)) return string.Empty;
            if (isFilterHtml) content = FilterHtml(content);//过滤掉html代码
            if (string.IsNullOrEmpty(content) || content.Length <= length) return content;

            if (isFlag)
            {
                content = content.Substring(0, length) + "...";
            }
            else
            {
                content = content.Substring(0, length);
            }
            return content;
        }

        /// <summary>
        /// 返回文章中带有图片的第一条数据
        /// </summary>
        /// <param name="content">文章内容</param>
        /// <returns></returns>
        public static string GetTxtFirstImgSrc(string content)
        {
            var imgSrc = string.Empty;
            if (string.IsNullOrWhiteSpace(content)) return imgSrc;

            const string pattern = @"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>([^\s\t\r\n""'<>])*)[^<>]*?/?[\s\t\r\n]*>";
            var matchs = Regex.Matches(content, pattern);
            foreach (Match match in matchs)
            {
                var url = match.Groups["imgUrl"].Value;
                if (url.ToLower().IndexOf("themes", StringComparison.Ordinal) > 0)
                    continue;

                if (url.ToLower().IndexOf("emotion", StringComparison.Ordinal) > 0)
                    continue;

                imgSrc = Regex.Replace(url, @"_\d+_\d+", "", RegexOptions.IgnoreCase);
                break;
            }
            return imgSrc;
        }

        /// <summary>
        /// 过滤词实体对象
        /// </summary>
        public class FilterWords
        {
            /// <summary>
            /// 要过滤的词
            /// </summary>
            public string WordPattern { get; set; }
            /// <summary>
            /// 替换词
            /// </summary>
            public string RepalceWord { get; set; }
        }

        /// <summary>
        /// 返回替换过后的文字内容
        /// </summary>
        /// <param name="strContext">文字内容</param>
        /// <param name="listFilterWords">替换词</param>
        /// <returns></returns>
        private static string ReplaceModWords(string strContext, IEnumerable<FilterWords> listFilterWords)
        {
            return strContext == null ? null : listFilterWords.Aggregate(strContext, (current, filterWords) => current.Replace(filterWords.WordPattern.Trim(), filterWords.RepalceWord));
        }

        /// <summary>
        /// 判断是否含有禁止词
        /// </summary>
        /// <param name="strContext">文字内容</param>
        /// <param name="listFilterWords">禁止词集合</param>
        /// <param name="strSensitiveWord">输出内容中存在的禁止词字符串 返回true代表有禁止词 false代表没有</param>
        /// <returns></returns>
        private static bool IsContainsForbidWords(string strContext, List<string> listFilterWords, out string strSensitiveWord)
        {
            if (string.IsNullOrEmpty(strContext))
            {
                strSensitiveWord = null;
                return false;
            }
            strSensitiveWord = "";  //初始化一下
            var regex = string.Join("|", listFilterWords.ToArray());
            var isPass = Regex.IsMatch(strContext, regex, RegexOptions.IgnoreCase);
            if (!isPass) return false;

            var matchCollection = Regex.Matches(strContext, regex, RegexOptions.IgnoreCase);
            strSensitiveWord = matchCollection.Cast<Match>().Aggregate(strSensitiveWord, (current, match) => current + (match.Value + ","));
            strSensitiveWord = strSensitiveWord.Substring(0, strSensitiveWord.Length - 1);
            return true;
        }

        /// <summary>
        /// 过滤html标签以及JS脚本
        /// </summary>
        /// <param name="content">待过滤的文本信息</param>
        /// <returns></returns>
        public static string FilterHtml(string content)
        {
            if (string.IsNullOrEmpty(content))
            {
                return string.Empty;
            }
            content = Regex.Replace(content, @"<([\u0000-\uffff]+?)>", "");
            return Regex.Replace(content, @"&(nbsp|#160);", "   ", RegexOptions.IgnoreCase); ;
        }

        /// <summary>
        /// 判断文本框混合输入长度
        /// </summary>
        /// <param name="str">要判断的字符串</param>
        /// <param name="i">长度</param>
        /// <returns></returns>
        public static bool CheckByteLength(string str, int i)
        {
            var b = Encoding.Default.GetBytes(str);
            var m = b.Length;
            return m <= i;
        }

        /// <summary>
        /// 判断文本框混合输入长度
        /// </summary>
        /// <param name="str">要判断的字符串</param>
        /// <param name="min"></param>
        /// <param name="max"></param>
        /// <returns></returns>
        public static bool CheckByteLength(string str, int min, int max)
        {
            var b = Encoding.Default.GetBytes(str);
            var m = b.Length;
            return m >= min && m <= max;
        }

        /// <summary>
        /// 组装26个英文字母到集合中
        /// </summary>
        /// <returns>返回字母集合</returns>
        public static List<string> GetLetterList()
        {
            var letterList = new List<string> { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
            return letterList;
        }

        /// <summary>
        /// 取html中所有图片地址
        /// </summary>
        /// <param name="strHtml">html代码</param>
        /// <returns>图片列表</returns>
        public static List<string> GetPicUrls(string strHtml)
        {
            var arrOutPut = new List<string>();
            if (string.IsNullOrWhiteSpace(strHtml)) return arrOutPut;

            const string url = @"((http|https):(\/\/|\\\\){1}((\w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(\S*\/)((\S)+[.]{1}(gif|jpg|jpeg|png|bmp)))";
            var r = new Regex(url, RegexOptions.IgnoreCase | RegexOptions.Compiled);
            var match1 = r.Match(strHtml);

            while (match1.Success)
            {
                var tmpUrl = match1.Groups[0].Value;

                if (tmpUrl.ToLower().IndexOf("themes", StringComparison.Ordinal) > 0)
                {
                    match1 = match1.NextMatch();
                    continue;
                }

                if (tmpUrl.ToLower().IndexOf("emotion", StringComparison.Ordinal) > 0)
                {
                    match1 = match1.NextMatch();
                    continue;
                }

                if (tmpUrl.ToLower().IndexOf("avatar", StringComparison.Ordinal) > 0)
                {
                    match1 = match1.NextMatch();
                    continue;
                }

                arrOutPut.Add(tmpUrl);
                match1 = match1.NextMatch();
            }
            return arrOutPut;
        }
         
        /// <summary>
        /// 返回指定IP是否在指定的IP数组所限定的范围内, IP数组内的IP地址可以使用*表示该IP段任意, 例如192.168.1.*
        /// </summary>
        /// <param name="ip"></param>
        /// <param name="iparray"></param>
        /// <returns></returns>
        public static bool InIpArray(string ip, string[] iparray)
        {
            var userip = SplitString(ip, @".");

            foreach (var t in iparray)
            {
                var tmpip = SplitString(t, @".");
                var r = 0;
                for (var i = 0; i < tmpip.Length; i++)
                {
                    if (tmpip[i] == "*")
                        return true;

                    if (userip.Length > i)
                    {
                        if (tmpip[i] == userip[i])
                            r++;
                        else
                            break;
                    }
                    else
                        break;
                }

                if (r == 4)
                    return true;
            }
            return false;
        }

        /// <summary>
        /// 分割字符串
        /// </summary>
        public static string[] SplitString(string strContent, string strSplit)
        {
            if (!StrIsNullOrEmpty(strContent))
            {
                if (strContent.IndexOf(strSplit, System.StringComparison.Ordinal) < 0)
                    return new string[] { strContent };

                return Regex.Split(strContent, Regex.Escape(strSplit), RegexOptions.IgnoreCase);
            }
            else
                return new string[0] { };
        }

        /// <summary>
        /// 字段串是否为Null或为""(空)
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static bool StrIsNullOrEmpty(string str)
        {
            if (str == null || str.Trim() == string.Empty)
                return true;

            return false;
        }

        /// <summary>
        /// 财务模块动态生成列
        /// LJQK - 累计欠款
        /// LJJY - 累计结余
        /// YJJE - 应缴欠款
        /// XZRS - 新增人数
        /// SJJE - 已交金额
        /// TFJE - 退费金额
        /// TFRS - 退人数
        /// BookBuyerNum - 教材数
        /// </summary>
        /// <param name="strName">需要转换的列名</param>
        /// <param name="strMonth">要转换的月份。默认不填写</param>
        /// <returns></returns>
        public static string GetFinancialName(string strName, string strMonth = "")
        {
            if (string.IsNullOrEmpty(strName)) return strName;

            var result = "";
            var tmpMonth = strMonth;
            if (string.IsNullOrEmpty(tmpMonth))
            {
                tmpMonth = DateTime.Now.Month.ToString("MM");
            }

            switch (strName.ToUpper())
            {
                case "LJQK":
                    result = tmpMonth + "月之前累计欠款";
                    break;

                case "LJJY":
                    result = tmpMonth + "月之前累计结余";
                    break;

                case "YJJE":
                    result = tmpMonth + "月应缴欠款";
                    break;
                case "XZRS":
                    result = tmpMonth + "月新增人数";
                    break;
                case "SJJE":
                    result = tmpMonth + "月已交金额";
                    break;
                case "TFJE":
                    result = tmpMonth + "月退费金额";
                    break;
                case "TFRS":
                    result = tmpMonth + "月退人数";
                    break;
                case "BookBuyerNum":
                    result = tmpMonth + "月教材数";
                    break;

                default:
                    return result = strName;
            }
            return result;
        }

        /// <summary>
        /// 替换第一个匹配的内容
        /// </summary>
        /// <param name="inputString">输入的字符串</param>
        /// <param name="oldValue">被替换的字符串</param>
        /// <param name="newValue">替换的字符串</param>
        /// <returns></returns>
        public static string ReplaceFirst(string inputString, string oldValue, string newValue)
        {
            oldValue = oldValue.Replace("(", "//(");
            var regEx = new Regex(oldValue, RegexOptions.Multiline);
            return regEx.Replace(inputString, newValue ?? "", 1);
        }

        /// <summary>
        /// 替换最后一个匹配的内容
        /// </summary>
        /// <param name="inputString">输入的字符串</param>
        /// <param name="oldValue">被替换的字符串</param>
        /// <param name="newValue">替换的字符串</param>
        /// <returns></returns>
        public static string ReplaceLast(string inputString, string oldValue, string newValue)
        {
            var index = inputString.LastIndexOf(oldValue, System.StringComparison.Ordinal);
            if (index < 0)
            {
                return inputString;
            }
            else
            {
                var sb = new StringBuilder(inputString.Length - oldValue.Length + newValue.Length);
                sb.Append(inputString.Substring(0, index));
                sb.Append(newValue);
                sb.Append(inputString.Substring(index + oldValue.Length,
                   inputString.Length - index - oldValue.Length));
                return sb.ToString();
            }
        }

        /// <summary>
        /// 获取订单号 小批次号 大批次号(0产品唯一单号  1 订单号 2 小批次号 3 大批次号)
        /// </summary>
        /// <param name="flag"></param>
        /// <returns></returns>
        public static string GetProductOrderNum(int flag)
        {
            var frontstr = "ETLJTKH";
            var middlestr = "";
            switch (flag)
            {
                case 0:
                    middlestr = "00";
                    break;
                case 1:
                    middlestr = "01";
                    break;
                case 2:
                    middlestr = "02";
                    break;
                case 3:
                    middlestr = "03";
                    break;
                default:
                    break;
            }
            //后四位随机数
            var dateTimeStr = DateTime.Now.AddMilliseconds(new Random().Next(1000, 10000)).ToString("yyyyMMddHHmmssffff");
            //为了避免有重复数据出现.取 GUID前几位
            var mathstr = System.Guid.NewGuid().ToString("N").Substring(1, 8);
            var affterstr = dateTimeStr + mathstr;

            return frontstr + middlestr + affterstr;
        }


        /// <summary>
        /// 获取银行验证码 10位
        /// </summary>
        /// <returns></returns>
        public static string GetBankCode()
        {
            return DateTime.Now.ToString("yyMMddHHmmssfff") + new Random().Next(0, 9);
        }

        ///<summary>
        ///给一个字符串进行MD5加密
        ///</summary>
        ///<param   name="str">待加密字符串</param>
        ///<returns>加密后的字符串</returns>
        public static string MD5Encrypt(string str)
        {
            string cl = str;
            string pwd = "";
            MD5 md5 = MD5.Create();//实例化一个md5对像
            // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
            // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
            for (int i = 0; i < s.Length; i++)
            {
                // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 
                cl = s[i].ToString("X");
                pwd = pwd + (cl.Length == 1 ? "0" + cl : cl);

            }
            return pwd;
        }

        /// <summary>
        /// Post访问Http协议接口
        /// </summary>
        /// <param name="url"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public static string HttpPost(string url, string data)
        {
            var request = WebRequest.Create(url) as HttpWebRequest;
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            byte[] bs = Encoding.UTF8.GetBytes(data);
            Stream reqStream = request.GetRequestStream();
            reqStream.Write(bs, 0, bs.Length);
            reqStream.Close();

            string responseString = null;
            try
            {
                using (var response = request.GetResponse() as HttpWebResponse)
                {
                    var reader = new StreamReader(response.GetResponseStream());
                    responseString = reader.ReadToEnd();
                    reader.Close();
                }
            }
            catch (Exception)
            {
                return responseString;
            }
            return responseString;
        }


        /// <summary>
        /// 写日志
        /// </summary>
        /// <param name="username">操作用户</param>
        /// <param name="message">日志信息</param>
        public static void WriteLog(string username, string message)
        {
            //string p = HttpContext.Current.Server.MapPath("~/log/");
            //string fn = p + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";

            //if (!Directory.Exists(p))
            //    Directory.CreateDirectory(p);

            //List<string> contents = new List<string>();
            //contents.Add("************************************");
            //contents.Add("操作时间:" + DateTime.Now.ToString());
            //contents.Add("操作用户:" + username);
            //contents.Add("日志信息:" + message);
            //contents.Add("************************************");
            //contents.Add("");
            //File.AppendAllLines(fn, contents);
        }


        /// <summary>
        /// 获取荆州学习码
        /// </summary>
        /// <param name="orgCode">最新系统编码</param>
        /// <returns></returns>
        public static string GetStudyCode(string orgCode)
        {
            //C_department 表中值  2017-03-09
            var codenum = orgCode;
            var code = codenum.Substring(0, 2);
            var num = codenum.Substring(6, 5);
            var mon = codenum.Substring(4, 2);
            var nowmon = DateTime.Now.Month.ToString(CultureInfo.InvariantCulture);
            if (nowmon.Length != 2)
            {
                nowmon = "0" + nowmon;
            }
            if (nowmon != mon)
            {
                codenum = code + DateTime.Now.Year.ToString(CultureInfo.InvariantCulture).Substring(2, 2) + nowmon +
                          "00001";
            }
            else
            {
                var cdk = int.Parse(num) + 1;
                var str = "";
                for (var q = 5; q > cdk.ToString(CultureInfo.InvariantCulture).Length; q--)
                {
                    str = str + "0";
                }
                codenum = code + DateTime.Now.Year.ToString(CultureInfo.InvariantCulture).Substring(2, 2) + nowmon +
                          str + cdk;
            }
            return codenum;
        }

     


        /// <summary>
        /// 根据身份证号获取出生日期
        /// </summary>
        /// <param name="personalId"></param>
        /// <returns></returns>
        public static string GetBirthDayByPersonalId(string personalId)
        {
            var birthday = String.Empty;
            if (personalId.Length == 18)//处理18位的身份证号码从号码中得到生日和性别代码
            {
                birthday = personalId.Substring(6, 4) + "-" + personalId.Substring(10, 2) + "-" + personalId.Substring(12, 2);
            }
            if (personalId.Length == 15)
            {
                birthday = "19" + personalId.Substring(6, 2) + "-" + personalId.Substring(8, 2) + "-" + personalId.Substring(10, 2);
            }
            return birthday;
        }

        /// <summary>
        /// 根据身份证获取性别
        /// </summary>
        /// <param name="personalId"></param>
        /// <returns></returns>
        public static string GetSexTypeByPersonalId(string personalId)
        {
            var sexType = String.Empty;
            //处理18位的身份证号码从号码中得到生日和性别代码
            if (personalId.Length == 18)
            {

                sexType = personalId.Substring(14, 3);
            }
            //处理15位的身份证号码从号码中得到生日和性别代码
            if (personalId.Length == 15)
            {

                sexType = personalId.Substring(12, 3);
            }
            //性别代码为偶数是女性奇数为男性
            sexType = int.Parse(sexType) % 2 == 0 ? "" : "";
            return sexType;
        }

        /// <summary>  
        /// 得到本周第一天(以星期一为第一天)  
        /// </summary>  
        /// <param name="datetime"></param>  
        /// <returns></returns>  
        public static string GetWeekFirstDayMon(DateTime datetime)
        {
            //星期一为第一天  
            var weeknow = Convert.ToInt32(DateTime.Now.DayOfWeek);

            //因为是以星期一为第一天,所以要判断weeknow等于0时,要向前推6天。  
            weeknow = (weeknow == 0 ? (7 - 1) : (weeknow - 1));
            var daydiff = (-1) * weeknow;

            //本周第一天  
            var firstDay = DateTime.Now.AddDays(daydiff).ToString("yyyy-MM-dd");
            return firstDay;
        }

        /// <summary>  
        /// 得到本周最后一天(以星期天为最后一天)  
        /// </summary>  
        /// <param name="datetime"></param>  
        /// <returns></returns>  
        public static string GetWeekLastDaySun(DateTime datetime)
        {
            //星期天为最后一天  
            var weeknow = Convert.ToInt32(DateTime.Now.DayOfWeek);
            weeknow = (weeknow == 0 ? 7 : weeknow);
            var daydiff = (7 - weeknow);

            //本周最后一天  
            var lastDay = DateTime.Now.AddDays(daydiff).ToString("yyyy-MM-dd");
            return lastDay;
        }

    }

 

posted @ 2020-11-12 14:37  春夏秋冬的千山万水  阅读(95)  评论(0)    收藏  举报