// ReSharper disable UnusedMember.Global using System.Security.Cryptography; namespace NSExt.Extensions; public static class StringExtensions { /// /// base64编码 /// /// 待base64编码的字符串 /// 字符串的编码方式 /// 编码后的base64字符串 public static string Base64(this string me, Encoding e) { return e.GetBytes(me).Base64(); } /// /// base64解码 /// /// 待解码的字符串 /// 解码后的原始字节数组 public static byte[] Base64De(this string me) { return Convert.FromBase64String(me); } /// /// base64解码 /// /// 待解码的字符串 /// 字符串的编码方式 /// 解码后的原始字符串 public static string Base64De(this string me, Encoding e) { return e.GetString(Base64De(me)); } /// /// 将易于web传输的base64web字符串转换为原生base64 /// /// /// 原生base64 public static string Base64Sys(this string me) { return me.Replace("-", "+").Replace("_", "/").Replace(".", "="); } /// /// 将原生base64字符串转换成易于web传输的字符串 /// /// /// 易于web传输的字符串 public static string Base64Web(this string me) { return me.Replace("+", "-").Replace("/", "_").Replace("=", "."); } /// /// 将字符串转换成日期对象 /// /// 待转换字符串 /// 转换后的日期对象 public static DateTime DateTime(this string me) { return System.DateTime.Parse(me, CultureInfo.CurrentCulture); } /// /// 将字符串转换成日期对象 /// /// 待转换字符串 /// 日期格式 /// 转换后的日期对象 public static DateTime DateTimeExact(this string me, string format) { return System.DateTime.ParseExact(me, format, CultureInfo.CurrentCulture); } /// /// 将字符串转换成日期对象 /// /// 待转换字符串 /// 转换失败时返回的日期对象 /// 转换后的日期对象 public static DateTime DateTimeTry(this string me, DateTime def) { return !System.DateTime.TryParse(me, out var ret) ? def : ret; } /// /// 将字符串转换成日期对象 /// /// 待转换字符串 /// 日期格式 /// 转换失败时返回的日期对象 /// 转换后的日期对象 public static DateTime DateTimeExactTry(this string me, string format, DateTime def) { return !System.DateTime.TryParseExact(me, format, CultureInfo.CurrentCulture, DateTimeStyles.None, out var ret) ? def : ret; } /// /// string to decimal /// /// string /// decimal public static decimal Dec(this string me) { return decimal.Parse(me, CultureInfo.CurrentCulture); } /// /// 尝试将字符串转为decimal /// /// 字符串 /// 转换失败后返回的默认值 /// 转换后的decimal public static decimal DecTry(this string me, decimal def) { return !decimal.TryParse(me, out var ret) ? def : ret; } /// /// 将字符串转换成枚举对象 /// /// /// /// public static T Enum(this string name) where T : Enum { return (T)System.Enum.Parse(typeof(T), name, true); } /// /// 将字符串转换成枚举对象 /// /// /// /// /// public static T EnumTry(this string name, T def) where T : Enum { return !System.Enum.TryParse(typeof(T), name, out var ret) ? def : (T)ret; } /// /// 将字符串转为guid /// /// 字符串 /// public static Guid Guid(this string me) { return System.Guid.Parse(me); } /// /// 将字符串转换成guid /// /// 字符串 /// 转换失败的返回值 /// public static Guid Guid(this string me, Guid def) { return System.Guid.TryParse(me, out var ret) ? ret : def; } /// /// 将字符串转换成字节数组形式 /// /// 字符串 /// 字符串使用的编码 /// 字节数组 public static byte[] Hex(this string me, Encoding e) { return e.GetBytes(me); } /// /// 解码html编码 /// /// html编码后的字符串 /// 解码后的原始字符串 public static string HtmlDe(this string me) { return HttpUtility.HtmlDecode(me); } /// /// string to Int32 /// /// string /// Int32 public static int Int32(this string me) { return int.Parse(me, CultureInfo.CurrentCulture); } /// /// 尝试将字符串转为int32 /// /// 字符串 /// 转换失败后返回的默认值 /// 转换后的int32 public static int Int32Try(this string me, int def) { return !int.TryParse(me, out var ret) ? def : ret; } /// /// string to Int64 /// /// string /// Int64 public static long Int64(this string me) { return long.Parse(me, CultureInfo.CurrentCulture); } /// /// 尝试将字符串转为int64 /// /// 字符串 /// 转换失败后返回的默认值 /// 转换后的int64 public static long Int64Try(this string me, long def) { return !long.TryParse(me, out var ret) ? def : ret; } /// /// 将一个json字符串反序列化成为jObject对象 /// /// 字符串 /// public static JObject JObject(this string me) { return Newtonsoft.Json.Linq.JObject.Parse(me); } public static string MaskChineseName(this string me) { if (me.Length == 2) return "*" + me[1..]; return me[..1] + "*" + me[^1..]; } /// /// 对一个手机号进行掩码处理 /// /// 手机号 /// 掩码后的手机号 public static string MaskMobile(this string me) { return new Regex(@"^(\d{3})\d{4}(\d{4})$").Replace(me, "$1****$2"); } /// /// 对一个字符串进行sha1 hash运算 /// /// 字符串 /// 字符串使用的编码 /// hash摘要的16进制文本形式(无连字符小写) public static string Sha1(this string me, Encoding e) { using var sha1 = SHA1.Create(); return BitConverter.ToString(sha1.ComputeHash(e.GetBytes(me))) .Replace("-", string.Empty) .ToLower(CultureInfo.CurrentCulture); } /// /// 对一个字符串进行sha1 hash运算 /// /// 对一个字符串进行sha1 hash运算 /// 密钥 /// 使用的编码 /// hash摘要的16进制文本形式(无连字符小写) public static string HmacSha1(this string me, string secret, Encoding e) { using var hmacSha1 = new HMACSHA1(e.GetBytes(secret)); return BitConverter.ToString(hmacSha1.ComputeHash(e.GetBytes(me))) .Replace("-", string.Empty) .ToLower(CultureInfo.CurrentCulture); } /// /// 对一个字符串进行md5hash运算 /// /// 字符串 /// 字符串使用的编码 /// hash摘要的16进制文本形式(无连字符小写) public static string Md5(this string me, Encoding e) { using var md5 = MD5.Create(); return BitConverter.ToString(md5.ComputeHash(e.GetBytes(me))) .Replace("-", string.Empty) .ToLower(CultureInfo.CurrentCulture); } /// /// MD5 hmac编码 /// /// 字符串 /// 密钥 /// 字符串使用的编码 /// hash摘要的16进制文本形式(无连字符小写) private static string Md5Hmac(this string me, string key, Encoding e) { using var md5Hmac = new HMACMD5(e.GetBytes(key)); return BitConverter.ToString(md5Hmac.ComputeHash(e.GetBytes(me))) .Replace("-", string.Empty) .ToLower(CultureInfo.CurrentCulture); } /// /// 判断字符串是否为null或不存在子元素(如果为集合对象);如果为空,返回指定的默认值,否则返回字符串本身 /// /// 指定字符串 /// 指定的默认值 /// 如果为空,返回指定的默认值,否则返回字符串本身 public static string NullOrEmpty(this string me, string defVal) { return me.AsEnumerable().NullOrEmpty() ? defVal : me; } /// /// 反序列化一个文件获得指定类型的数据对象 /// /// 等待反序列化的json文本 /// 反序列化后生成的对象 public static T Object(this string me) { return JsonConvert.DeserializeObject(me); } /// /// 生成密码 /// /// 密码原文 /// 密文 public static string Pwd(this string me) { return me.Md5Hmac(me.Md5(Encoding.UTF8), Encoding.UTF8); } /// /// 移除字符串中的html标签 /// /// 字符串 /// 处理之后的字符串 public static string RemoveHtmlTag(this string me) { return new Regex(@"<[^>]*>").Replace(me, ""); } /// /// 删除换行符 /// /// /// public static string RemoveWrapped(this string me) { return me.Replace("\r", "").Replace("\n", ""); } /// /// 截取指定长度的字符串,代替substring /// /// /// /// /// public static string Sub(this string me, int startIndex, int length) { if (startIndex + length > me.Length) length = me.Length - startIndex; return me.Substring(startIndex, length); } /// /// 将连续多个空格替换成一个空格 /// /// /// public static string TrimSpaces(this string me) { var ret = me.Replace(" ", " "); // ReSharper disable once TailRecursiveCall return ret == me ? ret : TrimSpaces(ret); } /// /// url编码 /// /// 字符串 /// url编码后的字符串 public static string Url(this string me) { return Uri.EscapeDataString(me); } /// /// 解码url编码 /// /// url编码后的字符串 /// 解码后的原始字符串 public static string UrlDe(this string me) { return Uri.UnescapeDataString(me); } public static int IpV4ToInt32(this string me) { return BitConverter.ToInt32(me.Split('.').Select(byte.Parse).Reverse().ToArray(), 0); } public static bool NullOrWhiteSpace(this string me) { return string.IsNullOrWhiteSpace(me); } }