扩展了一些String常用的方法.
using System; using System.Diagnostics; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; namespace Taolx.JuneAir.Common.Extensions { /// <summary> /// String 扩展类 /// </summary> public static class StringExtension { private static readonly Regex WebUrlExpression = new Regex(@"(http|https)://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?", RegexOptions.Singleline | RegexOptions.Compiled); private static readonly Regex EmailExpression = new Regex(@"^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$", RegexOptions.Singleline | RegexOptions.Compiled); private static readonly Regex StripHTMLExpression = new Regex("<\\S[^><]*>", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.CultureInvariant | RegexOptions.Compiled); private static readonly char[] IllegalUrlCharacters = new[] { ';', '/', '\\', '?', ':', '@', '&', '=', '+', '$', ',', '<', '>', '#', '%', '.', '!', '*', '\'', '"', '(', ')', '[', ']', '{', '}', '|', '^', '`', '~', '–', '‘', '’', '“', '”', '»', '«' }; /// <summary> /// 默认密钥-密钥的长度必须是32 /// </summary> private const string PublicKey = "1qaz2wsx3edc4rfv"; /// <summary> /// 默认向量 /// </summary> private const string Iv = "abcdefghijklmnop"; /// <summary> /// 为空或者"" /// </summary> /// <param name="source"></param> /// <returns></returns> public static bool IsNullOrEmpty(this string source) { return string.IsNullOrEmpty(source); } /// <summary> /// ToTrim /// </summary> /// <param name="source"></param> /// <param name="defalutVal"></param> /// <returns></returns> public static string ToTrim(this string source, string defalutVal = "") { return (source ?? defalutVal).Trim(); } /// <summary> /// string类型日期转换成datetiem类型 /// </summary> /// <param name="str"></param> /// <returns>转换失败返回null</returns> public static DateTime? ToNullbaleDateTime(this string str) { if (string.IsNullOrEmpty(str)) return null; DateTime dateTime; return DateTime.TryParse(str, out dateTime) ? dateTime : (DateTime?)null; } /// <summary> /// 将当前字符串从指定索引位置将指定长度的字符替换为新字符 /// </summary> /// <param name="oldStr">当前字符串</param> /// <param name="index">替换起始索引位置</param> /// <param name="length">指定长度</param> /// <param name="newChar">替换的字符</param> /// <returns></returns> public static string ReplaceStr(this string oldStr, int index, int length, char newChar = '*') { if (oldStr == null) return ""; if (index < 0) index = 0; if (length > oldStr.Length) length = oldStr.Length; string keepStr = oldStr.Substring(length - index, oldStr.Length - length); return keepStr.PadLeft(oldStr.Length, newChar); } /// <summary> /// 获取32位长度的Md5摘要 /// </summary> /// <param name="input"></param> /// <param name="encoding"></param> /// <returns></returns> public static string Get32Md5(this string input, Encoding encoding = null) { if (encoding == null) encoding = Encoding.UTF8; StringBuilder buff = new StringBuilder(32); MD5 md5 = new MD5CryptoServiceProvider(); byte[] t = md5.ComputeHash(encoding.GetBytes(input)); foreach (byte t1 in t) buff.Append(t1.ToString("x").PadLeft(2, '0')); return buff.ToString(); } /// <summary> /// md5去掉"-"转成string /// </summary> public static string ToMD5(this string str) { //return System.Security.Cryptography.MD5.Create(str).ToString(); //return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5"); //System.Security.Cryptography.MD5 md55 = new System.Security.Cryptography.MD5CryptoServiceProvider(); if (string.IsNullOrEmpty(str)) return str; System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create(); string encoded = BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(str))).Replace("-", ""); return encoded.ToLower(); } /// <summary> /// 是否为WebUrl地址 /// </summary> /// <param name="target"></param> /// <returns></returns> public static bool IsWebUrl(this string target) { return !string.IsNullOrEmpty(target) && WebUrlExpression.IsMatch(target); } /// <summary> /// 是否为Email地址 /// </summary> /// <param name="target"></param> /// <returns></returns> public static bool IsEmail(this string target) { return !string.IsNullOrEmpty(target) && EmailExpression.IsMatch(target); } /// <summary> /// string转Guid /// </summary> /// <param name="target"></param> /// <returns></returns> public static Guid ToGuid(this string target) { Guid result = Guid.Empty; if ((!string.IsNullOrEmpty(target)) && (target.Trim().Length == 22)) { string encoded = string.Concat(target.Trim().Replace("-", "+").Replace("_", "/"), "=="); try { byte[] base64 = Convert.FromBase64String(encoded); result = new Guid(base64); } catch (FormatException) { } } return result; } /// <summary> /// 是否为数字 /// </summary> /// <param name="str"></param> /// <returns></returns> public static Boolean IsNumeric(this String str) { long temp_big_int; var is_number = long.TryParse(str, out temp_big_int); return is_number; } /// <summary> /// string to int /// </summary> /// <param name="str"></param> /// <param name="defVal"></param> /// <returns></returns> public static int ToInt(this String str, int defVal = 0) { int.TryParse(str, out defVal); return defVal; } /// <summary> /// string to long /// </summary> /// <param name="str"></param> /// <param name="defVal"></param> /// <returns></returns> public static long ToLong(this String str, long defVal = 0) { long.TryParse(str, out defVal); return defVal; } /// <summary> /// string to decimal /// </summary> /// <param name="str"></param> /// <param name="defVal"></param> /// <returns></returns> public static decimal ToDecimal(this String str, decimal defVal = 0) { decimal.TryParse(str, out defVal); return defVal; } /// <summary> /// string to float /// </summary> /// <param name="str"></param> /// <param name="defVal"></param> /// <returns></returns> public static float ToFloat(this String str, float defVal = 0) { float.TryParse(str, out defVal); return defVal; } /// <summary> /// string to double /// </summary> /// <param name="str"></param> /// <param name="defVal"></param> /// <returns></returns> public static double ToDouble(this String str, double defVal = 0) { double.TryParse(str, out defVal); return defVal; } private static DateTime minValue = DateTime.MinValue; /// <summary> /// string to datetime /// </summary> /// <param name="str"></param> /// <param name="format">日期格式</param> /// <param name="defVal">默认日期</param> /// <returns></returns> public static DateTime ToDateTime(this string str, string format, DateTime defVal) { try { DateTime dt = DateTime.ParseExact(str, format, System.Globalization.CultureInfo.InvariantCulture); return dt; } catch (Exception ex) { Debug.WriteLine(ex); return defVal; } } #region 加解密 /// <summary> /// AES加密 /// </summary> /// <param name="str">需要加密字符串</param> /// <returns>加密后字符串</returns> public static String Encrypt(this string str) { try { return Encrypt(str, PublicKey); } catch (Exception e) { return str; } } /// <summary> /// AES解密 /// </summary> /// <param name="str">需要解密字符串</param> /// <returns>解密后字符串</returns> public static String Decrypt(this string str) { try { return Decrypt(str, PublicKey); } catch (Exception e) { return str; } } /// <summary> /// AES加密 /// </summary> /// <param name="str">需要加密的字符串</param> /// <param name="key">32位密钥</param> /// <returns>加密后的字符串</returns> public static string Encrypt(this string str, string key) { Byte[] keyArray = System.Text.Encoding.UTF8.GetBytes(key); Byte[] toEncryptArray = System.Text.Encoding.UTF8.GetBytes(str); var rijndael = new System.Security.Cryptography.RijndaelManaged(); rijndael.Key = keyArray; rijndael.Mode = System.Security.Cryptography.CipherMode.ECB; rijndael.Padding = System.Security.Cryptography.PaddingMode.PKCS7; rijndael.IV = System.Text.Encoding.UTF8.GetBytes(Iv); System.Security.Cryptography.ICryptoTransform cTransform = rijndael.CreateEncryptor(); Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray, 0, resultArray.Length); } /// <summary> /// AES解密 /// </summary> /// <param name="str">需要解密的字符串</param> /// <param name="key">32位密钥</param> /// <returns>解密后的字符串</returns> public static string Decrypt(this string str, string key) { Byte[] keyArray = System.Text.Encoding.UTF8.GetBytes(key); Byte[] toEncryptArray = Convert.FromBase64String(str); var rijndael = new System.Security.Cryptography.RijndaelManaged(); rijndael.Key = keyArray; rijndael.Mode = System.Security.Cryptography.CipherMode.ECB; rijndael.Padding = System.Security.Cryptography.PaddingMode.PKCS7; rijndael.IV = System.Text.Encoding.UTF8.GetBytes(Iv); System.Security.Cryptography.ICryptoTransform cTransform = rijndael.CreateDecryptor(); Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return System.Text.Encoding.UTF8.GetString(resultArray); } /// <summary> /// AES加密 /// </summary> /// <param name="str">需要加密字符串</param> /// <returns>加密后字符串</returns> public static String EncryptToString(this string str) { try { return EncryptToString(str, PublicKey); } catch (Exception e) { return str; } } /// <summary> /// AES加密 /// </summary> /// <param name="str">需要加密的字符串</param> /// <param name="key">32位密钥</param> /// <returns>加密后的字符串</returns> public static string EncryptToString(this string str, string key) { Byte[] keyArray = System.Text.Encoding.UTF8.GetBytes(key); Byte[] toEncryptArray = System.Text.Encoding.UTF8.GetBytes(str); var rijndael = new System.Security.Cryptography.RijndaelManaged(); rijndael.Key = keyArray; rijndael.Mode = System.Security.Cryptography.CipherMode.ECB; rijndael.Padding = System.Security.Cryptography.PaddingMode.PKCS7; rijndael.IV = System.Text.Encoding.UTF8.GetBytes(Iv); System.Security.Cryptography.ICryptoTransform cTransform = rijndael.CreateEncryptor(); Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); StringBuilder builder = new StringBuilder(); int num2 = resultArray.Length - 1; for (int i = 0; i <= num2; i++) { builder.AppendFormat("{0:X2}", resultArray[i]); } return builder.ToString(); // return Convert.ToBase64String(resultArray, 0, resultArray.Length); } /// <summary> /// AES解密 /// </summary> /// <param name="str">需要解密字符串</param> /// <returns>解密后字符串</returns> public static String DecryptToString(this string str) { try { return DecryptToString(str, PublicKey); } catch (Exception e) { return str; } } /// <summary> /// AES解密 /// </summary> /// <param name="str">需要解密的字符串</param> /// <param name="key">32位密钥</param> /// <returns>解密后的字符串</returns> public static string DecryptToString(this string str, string key) { Byte[] keyArray = System.Text.Encoding.UTF8.GetBytes(key); int halfInputLength = str.Length / 2; Byte[] toEncryptArray = new Byte[halfInputLength]; for (int x = 0; x < halfInputLength; x++) { int i = (Convert.ToInt32(str.Substring(x * 2, 2), 16)); toEncryptArray[x] = (byte)i; } var rijndael = new System.Security.Cryptography.RijndaelManaged(); rijndael.Key = keyArray; rijndael.Mode = System.Security.Cryptography.CipherMode.ECB; rijndael.Padding = System.Security.Cryptography.PaddingMode.PKCS7; rijndael.IV = System.Text.Encoding.UTF8.GetBytes(Iv); System.Security.Cryptography.ICryptoTransform cTransform = rijndael.CreateDecryptor(); Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return System.Text.Encoding.UTF8.GetString(resultArray); // return UTF8Encoding.UTF8.GetString(resultArray); } #endregion private static readonly Regex RepalceHttpToHttpsRegex = new Regex("^http(\\:\\/\\/){1}", RegexOptions.IgnoreCase); /// <summary> /// 替换http为https /// </summary> /// <param name="url">targetProtocol: https</param> /// <returns></returns> public static string ToHttpsUrl(this string url) { url = url.ToTrim(); string strOutput = RepalceHttpToHttpsRegex.Replace(url, "https://"); return strOutput; } private static readonly Regex RemoveHttpOrHttpsRegex = new Regex("^http(s?)(\\:\\/\\/){1}", RegexOptions.IgnoreCase); /// <summary> ////// </summary> /// <param name="url">targetProtocol: https</param> /// <returns></returns> public static string ToRemoveUrlProtocol(this string url) { url = url.ToTrim(); string strOutput = RemoveHttpOrHttpsRegex.Replace(url, "//"); return strOutput; } } }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步