针对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; } }