using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Web; namespace Xima.FreamWork.Common.Web { public class Utils { /// <summary> /// 返回字符串真实长度, 1个汉字长度为2 /// </summary> /// <returns>字符长度</returns> public static int GetStringLength(string str) { return Encoding.Default.GetBytes(str).Length; } /// <summary> /// 检测是否有Sql危险字符 /// </summary> /// <param name="str">要判断字符串</param> /// <returns>判断结果</returns> public static bool IsSafeSqlString(string str) { return !Regex.IsMatch(str, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']"); } #region "字符转换" /// <summary> /// 将object转换为string类型 /// </summary> /// <param name="expression"></param> /// <returns></returns> public static string ToStr(object expression) { return TypeConverter.ObjToStr(expression); } /// <summary> /// object型转换为bool型 /// </summary> /// <param name="strValue">要转换的字符串</param> /// <param name="defValue">缺省值</param> /// <returns>转换后的bool类型结果</returns> public static bool StrToBool(object expression, bool defValue) { return TypeConverter.StrToBool(expression, defValue); } /// <summary> /// string型转换为bool型 /// </summary> /// <param name="strValue">要转换的字符串</param> /// <param name="defValue">缺省值</param> /// <returns>转换后的bool类型结果</returns> public static bool StrToBool(string expression, bool defValue) { return TypeConverter.StrToBool(expression, defValue); } /// <summary> /// 将对象转换为Int32类型 /// </summary> /// <param name="expression">要转换的字符串</param> /// <param name="defValue">缺省值</param> /// <returns>转换后的int类型结果</returns> public static int StrToInt(object expression, int defValue) { return TypeConverter.ObjectToInt(expression, defValue); } /// <summary> /// 将字符串转换为Int32类型 /// </summary> /// <param name="expression">要转换的字符串</param> /// <param name="defValue">缺省值</param> /// <returns>转换后的int类型结果</returns> public static int StrToInt(string expression, int defValue) { return TypeConverter.StrToInt(expression, defValue); } /// <summary> /// 将字符串转换为Byte类型 /// </summary> /// <param name="expression">要转换的字符串</param> /// <param name="defValue">缺省值</param> /// <returns>转换后的int类型结果</returns> public static Byte StrToByte(object expression, byte defValue) { return TypeConverter.ObjectToByte(expression, defValue); } /// <summary> /// 将字符串转换为Byte类型 /// </summary> /// <param name="expression">要转换的字符串</param> /// <param name="defValue">缺省值</param> /// <returns>转换后的int类型结果</returns> public static Byte StrToByte(string expression, byte defValue) { return TypeConverter.StrToByte(expression, defValue); } /// <summary> /// 将字符串转换为Int32类型 /// </summary> /// <param name="expression">要转换的字符串</param> /// <param name="defValue">缺省值</param> /// <returns>转换后的int类型结果</returns> public static Int64 StrToInt64(string expression, int defValue) { return TypeConverter.StrToInt64(expression, defValue); } /// <summary> /// Object型转换为float型 /// </summary> /// <param name="strValue">要转换的字符串</param> /// <param name="defValue">缺省值</param> /// <returns>转换后的int类型结果</returns> public static float StrToFloat(object strValue, float defValue) { return TypeConverter.StrToFloat(strValue, defValue); } /// <summary> /// string型转换为float型 /// </summary> /// <param name="strValue">要转换的字符串</param> /// <param name="defValue">缺省值</param> /// <returns>转换后的float类型结果</returns> public static float StrToFloat(string strValue, float defValue) { return TypeConverter.StrToFloat(strValue, defValue); } /// <summary> /// string类型转换为decimal /// </summary> /// <param name="strValue">要转换的字符串</param> /// <param name="defValue">缺省值</param> /// <returns>转换后的decimal类型结果</returns> public static decimal strToDecimal(string strValue, decimal defValue) { return TypeConverter.StrToDecimal(strValue, defValue); } #endregion #region "IP地址" /// <summary> /// 是否为ip /// </summary> /// <param name="ip"></param> /// <returns></returns> public static bool IsIP(string ip) { return Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$"); } public static bool IsIPSect(string ip) { return Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){2}((2[0-4]\d|25[0-5]|[01]?\d\d?|\*)\.)(2[0-4]\d|25[0-5]|[01]?\d\d?|\*)$"); } #endregion #region grid文字超长截取 public static string GetUnicodeSubString(string str, int len, string p_TailString) { string result = string.Empty;// 最终返回的结果 int byteLen = System.Text.Encoding.Default.GetByteCount(str);// 单字节字符长度 int charLen = str.Length;// 把字符平等对待时的字符串长度 int byteCount = 0;// 记录读取进度 int pos = 0;// 记录截取位置 if (byteLen > len) { for (int i = 0; i < charLen; i++) { if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2 byteCount += 2; else// 按英文字符计算加1 byteCount += 1; if (byteCount > len)// 超出时只记下上一个有效位置 { pos = i; break; } else if (byteCount == len)// 记下当前位置 { pos = i + 1; break; } } if (pos >= 0) result = str.Substring(0, pos) + p_TailString; } else result = str; return result; } #endregion /// <summary> /// 格式化价格信息 /// </summary> /// <param name="Price"></param> /// <returns></returns> public static string FormatPrice(object Price) { return string.Format("{0:c}", decimal.Parse(Price.ToString())); } /// <summary> /// 返回根目录 /// </summary> /// <returns></returns> public static string GetRootPath() { return System.Web.HttpContext.Current.Server.MapPath("/"); } /// <summary> /// 获得当前绝对路径 /// </summary> /// <param name="strPath">指定的路径</param> /// <returns>绝对路径</returns> public static string GetMapPath(string strPath) { if (HttpContext.Current != null) { return HttpContext.Current.Server.MapPath(strPath); } else //非web程序引用 { strPath = strPath.Replace("/", "\\"); if (strPath.StartsWith("\\")) { strPath = strPath.Substring(strPath.IndexOf('\\', 1)).TrimStart('\\'); } return System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath); } } #region "按当前日期和时间生成随机数" /// <summary> /// 按当前日期和时间生成随机数 /// </summary> /// <param name="Num">附加随机数长度</param> /// <returns></returns> public static string sRndNum(int Num) { string sTmp_Str = System.DateTime.Today.Year.ToString() + System.DateTime.Today.Month.ToString("00") + System.DateTime.Today.Day.ToString("00") + System.DateTime.Now.Hour.ToString("00") + System.DateTime.Now.Minute.ToString("00") + System.DateTime.Now.Second.ToString("00"); return sTmp_Str + RndNum(Num); } #endregion #region 生成0-9随机数 /// <summary> /// 生成0-9随机数 /// </summary> /// <param name="VcodeNum">生成长度</param> /// <returns></returns> public static string RndNum(int VcodeNum) { StringBuilder sb = new StringBuilder(VcodeNum); Random rand = new Random((int)DateTime.Now.Ticks); for (int i = 1; i < VcodeNum + 1; i++) { int t = rand.Next(9); sb.AppendFormat("{0}", t); } return sb.ToString(); } #endregion /// <summary> /// 计算两个日期的时间间隔 /// </summary> /// <param name="DateTime1">第一个日期和时间</param> /// <param name="DateTime2">第二个日期和时间</param> /// <returns></returns> public static string DateDiff(DateTime DateTime1, DateTime DateTime2) { string dateDiff = string.Empty; TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); TimeSpan ts2 = new TimeSpan(DateTime2.Ticks); TimeSpan ts = ts1.Subtract(ts2).Duration(); dateDiff = ts.Days.ToString() + "Day" + ts.Hours.ToString() + "Hours" + ts.Minutes.ToString() + "Minutes" + ts.Seconds.ToString() + "Seconds"; return dateDiff; } /// <summary> /// 计算两个日期的时间间隔 /// 第一个日期减去第二个日期 /// </summary> /// <param name="DateTime1">第一个日期和时间</param> /// <param name="DateTime2">第二个日期和时间</param> /// <returns></returns> public static int Date2Diff(DateTime DateTime1, DateTime DateTime2) { DateTime1 = Convert.ToDateTime(DateTime1.ToString("yyyy-MM-dd")); DateTime2 = Convert.ToDateTime(DateTime2.ToString("yyyy-MM-dd")); TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); TimeSpan ts2 = new TimeSpan(DateTime2.Ticks); TimeSpan ts = ts1.Subtract(ts2); return ts.Days; } /// <summary> /// 计算日期到今天时间间隔,返回整形 /// </summary> /// <param name="DateTime1">需要计算的日期</param> /// <returns></returns> public static int DateDiff(DateTime DateTime1) { int dateDiff = 0; TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks); TimeSpan ts = ts1.Subtract(ts2).Duration(); dateDiff = ts.Days; return dateDiff; } #region 全角半角转换 /// <summary> /// 转全角的函数(SBC case) /// </summary> /// <param name="input">任意字符串</param> /// <returns>全角字符串</returns> ///<remarks> ///全角空格为12288,半角空格为32 ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 ///</remarks> public static string ToSBC(string input) { //半角转全角: char[] c = input.ToCharArray(); for (int i = 0; i < c.Length; i++) { if (c[i] == 32) { c[i] = (char)12288; continue; } if (c[i] < 127) c[i] = (char)(c[i] + 65248); } return new string(c); } /// <summary> 转半角的函数(DBC case) </summary> /// <param name="input">任意字符串</param> /// <returns>半角字符串</returns> ///<remarks> ///全角空格为12288,半角空格为32 ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 ///</remarks> public static string ToDBC(string input) { char[] c = input.ToCharArray(); for (int i = 0; i < c.Length; i++) { if (c[i] == 12288) { c[i] = (char)32; continue; } if (c[i] > 65280 && c[i] < 65375) c[i] = (char)(c[i] - 65248); } return new string(c); } /// <summary> /// 把英文半角符号'"替换为英文全角符号'",防止干扰前台的js函数tooltip.show()而导致乱码 /// </summary> /// <param name="strList">不安全的字符串</param> /// <returns>安全的字符串</returns> public static string protectJsTooltipShow(string strList) { string strSafe = strList; strSafe = strSafe.Replace("&", "&"); strSafe = strSafe.Replace("\"", """); strSafe = strSafe.Replace("\n", "<br>"); strSafe = strSafe.Replace(@"\", @"\\"); strSafe = strSafe.Replace("'", "\\'"); strSafe = strSafe.Replace("<", "<"); strSafe = strSafe.Replace(">", ">"); return strSafe; } #endregion public static string ChineseTONumber(string chStr) { const string numStr = "0123456789"; const string chineseStr = "零一二三四五六七八九"; char[] c = chStr.ToCharArray(); for (int i = 0; i < c.Length; i++) { int index = chineseStr.IndexOf(c[i]); if (index != -1) c[i] = numStr.ToCharArray()[index]; } return new string(c); } public static string NumberToChinese(string numberStr) { var numStr = "0123456789"; var chineseStr = "零一二三四五六七八九"; char[] c = numberStr.ToCharArray(); for (int i = 0; i < c.Length; i++) { int index = numStr.IndexOf(c[i]); if (index != -1) c[i] = chineseStr.ToCharArray()[index]; } return new string(c); } } }