using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Text.RegularExpressions;
using System.Security.Cryptography;
/**/
///功能:字符文本操作类
///程序:郭城
///
///
namespace XHW
{
/// <summary>
/// 字符文本操作类
/// </summary>
public class StringHelper
{
public static bool IsContains(string[] strs, string value)
{
if (strs == null)
{
return false;
}
foreach (string str in strs)
{
if (str == value)
{
return true;
}
}
return false;
}
#region 字符串过滤
#region 对字符串进行HTML编码,针对(input,Textarea)输入时过滤脚本及HTML编码
/**/
/// <summary>
/// 对字符串进行HTML编码,针对(input,Textarea)输入时过滤脚本及HTML编码
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
#endregion
public static string EncodeToHtml(string source)
{
source = source.Trim();
source = source.Replace("'", "''");
source = source.Replace("//", "\");
source = System.Web.HttpContext.Current.Server.HtmlEncode(source);
source = source.Replace("/r/n", "<br>");
source = source.Replace("/n", "<br>");
return source;
}
#region [否决的]对字符串进行HTML编码,针对(input,Textarea)输入时过滤脚本及HTML编码
/**/
/// <summary>
/// [否决的]对字符串进行HTML编码,针对(input,Textarea)输入时过滤脚本及HTML编码 (不符合命名规范,请使用 EncodeToHtml 方法 )
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
#endregion
public static string HtmlFilterForInput(string source)
{
return EncodeToHtml(source);
}
#region 还原HTML编码为字符串,还原HTML编码为字符串,用于返回到input或 Textarea 输入框
/**/
/// <summary>
/// 还原HTML编码为字符串,用于返回到input或 Textarea 输入框
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
#endregion
public static string DecodeFormHtml(string source)
{
source = source.Trim();
source = source.Replace("<br>", "/r/n");
source = source.Replace("<br>", "/n");
source = System.Web.HttpContext.Current.Server.HtmlDecode(source);
return source;
}
#region [否决的]还原HTML编码为字符串,还原HTML编码为字符串,用于返回到input或 Textarea 输入框
/**/
/// <summary>
/// [否决的]还原HTML编码为字符串,用于返回到input或 Textarea 输入框 (不符合命名规范,请使用 DecodeFormHtml 方法 )
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
#endregion
public static string DeHtmlFilterForInput(string source)
{
source = source.Trim();
source = source.Replace("<br>", "/r/n");
source = source.Replace("<br>", "/n");
source = System.Web.HttpContext.Current.Server.HtmlDecode(source);
return source;
}
#region 检验用户提交的URL参数字符里面是否有非法字符
/**/
/// <summary>
/// 检验用户提交的URL参数字符里面是否有非法字符,如果有则返回True.防止SQL注入.
/// </summary>
/// <param name="str">(string)</param>
/// <returns>bool</returns>
public static bool VerifyString(string str)
{
string strTmp = str.ToUpper();
if (strTmp.IndexOf("SELECT ") >= 0 || strTmp.IndexOf(" AND ") >= 0 || strTmp.IndexOf(" OR ") >= 0 ||
strTmp.IndexOf("EXEC ") >= 0 || strTmp.IndexOf("CHAR(") >= 0)
{
return true;
}
strTmp.Replace("'", "'").Replace(";", ";");
return false;
}
#endregion
#region 过滤 Sql 语句字符串中的注入脚本
/**/
/// <summary>
/// 过滤 Sql 语句字符串中的注入脚本
/// </summary>
/// <param name="source">传入的字符串</param>
/// <returns></returns>
#endregion
public static string FilterSql(string source)
{
//单引号替换成两个单引号
source = source.Replace("'", "''");
source = source.Replace("/"", "“");
source = source.Replace("|", "|");
//半角封号替换为全角封号,防止多语句执行
source = source.Replace(";", ";");
//半角括号替换为全角括号
source = source.Replace("(", "(");
source = source.Replace(")", ")");
/**/
///要用正则表达式替换,防止字母大小写得情况
//去除执行存储过程的命令关键字
source = source.Replace("Exec", "");
source = source.Replace("Execute", "");
//去除系统存储过程或扩展存储过程关键字
source = source.Replace("xp_", "x p_");
source = source.Replace("sp_", "s p_");
//防止16进制注入
source = source.Replace("0x", "0 x");
return source;
}
#region [否决的]过滤 Sql 语句字符串中的注入脚本
/**/
/// <summary>
/// [否决的]过滤 Sql 语句字符串中的注入脚本(请使用 FilterSql 方法 )
/// </summary>
/// <param name="source">传入的字符串</param>
/// <returns></returns>
#endregion
public static string SqlFilter(string source)
{
return FilterSql(source);
}
#region 过滤字符串只剩数字
/**/
/// <summary>
/// 过滤字符串只剩数字
/// </summary>
/// <param name="source">源字符串</param>
#endregion
public static string FilterToNumber(string source)
{
source = Regex.Replace(source, "[^0-9]*", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
return source;
}
#region [否决的]过滤字符串只剩数字
/**/
/// <summary>
/// [否决的]过滤字符串只剩数字(请使用 FilterToNumber 方法)
/// </summary>
/// <param name="source">源字符串</param>
#endregion
public static string NumberFilter(string source)
{
source = Regex.Replace(source, "[^0-9]*", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
return source;
}
#region 去除数组内重复元素
/**/
/// <summary>
/// 去除数组内重复元素
/// </summary>
/// <param name="arr"></param>
/// <returns></returns>
#endregion
public ArrayList FilterRepeatArrayItem(ArrayList arr)
{
//建立新数组
ArrayList newArr = new ArrayList();
//载入第一个原数组元素
if (arr.Count > 0)
{
newArr.Add(arr[0]);
}
//循环比较
for (int i = 0; i < arr.Count; i++)
{
if (!newArr.Contains(arr[i]))
{
newArr.Add(arr[i]);
}
}
return newArr;
}
#region 在最后去除指定的字符
/**/
/// <summary>
/// 在最后去除指定的字符
/// </summary>
/// <param name="source">参加处理的字符</param>
/// <param name="cutString">要去除的字符</param>
/// <returns>返回结果</returns>
#endregion
public static string CutLastString(string source, string cutString)
{
string result = "";
int tempIndex = 0;
tempIndex = source.LastIndexOf(cutString);
if (cutString.Length == (source.Length - tempIndex))
{
result = source.Substring(0, tempIndex);
}
else
{
result = source;
}
return result;
}
#region 利用正则表达式实现UBB代码转换为html代码
/**/
/// <summary>
/// 利用正则表达式实现UBB代码转换为html代码
/// </summary>
/// <param name="source">待处理的文本内容</param>
/// <returns>返回正确的html代码</returns>
#endregion
public static string UBBCode(string source)
{
if (source == null || source.Length == 0)
{
return "";
}
source = source.Replace(" ", "");
//source=source.Replace("<","<");
//source=source.Replace(">",">");
source = source.Replace("/n", "<br>");
source = Regex.Replace(source, @"/[url=(?<x>[^/]]*)/](?<y>[^/]]*)/[/url/]", @"<a href=$1 target=_blank>$2</a>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[url/](?<x>[^/]]*)/[/url/]", @"<a href=$1 target=_blank>$1</a>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[email=(?<x>[^/]]*)/](?<y>[^/]]*)/[/email/]", @"<a href=$1>$2</a>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[email/](?<x>[^/]]*)/[/email/]", @"<a href=$1>$1</a>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[flash](?<x>[^/]]*)/[/flash]", @"<OBJECT codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=500 height=400><PARAM NAME=movie VALUE=""$1""><PARAM NAME=quality VALUE=high><embed src=""$1"" quality=high pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width=500 height=400>$1</embed></OBJECT>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/", @"<IMG src=""$1"" border=0>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[color=(?<x>[^/]]*)/](?<y>[^/]]*)/[/color/]", @"<font color=$1>$2</font>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[face=(?<x>[^/]]*)/](?<y>[^/]]*)/[/face/]", @"<font face=$1>$2</font>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[size=1/](?<x>[^/]]*)/[/size/]", @"<font size=1>$1</font>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[size=2/](?<x>[^/]]*)/[/size/]", @"<font size=2>$1</font>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[size=3/](?<x>[^/]]*)/[/size/]", @"<font size=3>$1</font>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[size=4/](?<x>[^/]]*)/[/size/]", @"<font size=4>$1</font>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[size=5/](?<x>[^/]]*)/[/size/]", @"<font size=5>$1</font>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[size=6/](?<x>[^/]]*)/[/size/]", @"<font size=6>$1</font>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[align=(?<x>[^/]]*)/](?<y>[^/]]*)/[/align/]", @"<align=$1>$2</align>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[fly](?<x>[^/]]*)/[/fly]", @"<marquee width=90% behavior=alternate scrollamount=3>$1</marquee>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[move](?<x>[^/]]*)/[/move]", @"<marquee scrollamount=3>$1</marquee>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[glow=(?<x>[^/]]*),(?<y>[^/]]*),(?<z>[^/]]*)/](?<w>[^/]]*)/[/glow/]", @"<table width=$1 style='filter:glow(color=$2, strength=$3)'>$4</table>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[shadow=(?<x>[^/]]*),(?<y>[^/]]*),(?<z>[^/]]*)/](?<w>[^/]]*)/[/shadow/]", @"<table width=$1 style='filter:shadow(color=$2, strength=$3)'>$4</table>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[center/](?<x>[^/]]*)/[/center/]", @"<center>$1</center>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[b/](?<x>[^/]]*)/[/b/]", @"<b>$1</b>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[i/](?<x>[^/]]*)/[/i/]", @"<i>$1</i>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[u/](?<x>[^/]]*)/[/u/]", @"<u>$1</u>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[code/](?<x>[^/]]*)/[/code/]", @"<pre id=code><font size=1 face='Verdana, Arial' id=code>$1</font id=code></pre id=code>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[list/](?<x>[^/]]*)/[/list/]", @"<ul>$1</ul>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[list=1/](?<x>[^/]]*)/[/list/]", @"<ol type=1>$1</ol id=1>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[list=a/](?<x>[^/]]*)/[/list/]", @"<ol type=a>$1</ol id=a>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[/*/](?<x>[^/]]*)/[//*/]", @"<li>$1</li>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[quote](?<x>.*)/[/quote]", @"<center>—— 以下是引用 ——<table border='1' width='80%' cellpadding='10' cellspacing='0' ><tr><td>$1</td></tr></table></center>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[QT=*([0-9]*),*([0-9]*)/](.[^/[]*)/[//QT]", @"<embed src=$3 width=$1 height=$2 autoplay=true loop=false controller=true playeveryframe=false cache=false scale=TOFIT bgcolor=#000000 kioskmode=false targetcache=false pluginspage=http://www.apple.com/quicktime/>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[MP=*([0-9]*),*([0-9]*)/](.[^/[]*)/[//MP]", @"<object align=center classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95 class=OBJECT id=MediaPlayer width=$1 height=$2 ><param name=ShowStatusBar value=-1><param name=Filename value=$3><embed type=application/x-oleobject codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701 flename=mp src=$3 width=$1 height=$2></embed></object>", RegexOptions.IgnoreCase);
source = Regex.Replace(source, @"/[RM=*([0-9]*),*([0-9]*)/](.[^/[]*)/[//RM]", @"<OBJECT classid=clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA class=OBJECT id=RAOCX width=$1 height=$2><PARAM NAME=SRC VALUE=$3><PARAM NAME=CONSOLE VALUE=Clip1><PARAM NAME=CONTROLS VALUE=imagewindow><PARAM NAME=AUTOSTART VALUE=true></OBJECT><br><OBJECT classid=CLSID:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA height=32 id=video2 width=$1><PARAM NAME=SRC VALUE=$3><PARAM NAME=AUTOSTART VALUE=-1><PARAM NAME=CONTROLS VALUE=controlpanel><PARAM NAME=CONSOLE VALUE=Clip1></OBJECT>", RegexOptions.IgnoreCase);
return (source);
}
#region 整理(过滤)以英文逗号分割的字符串
/**/
/// <summary>
/// 整理(过滤)以英文逗号分割的字符串
/// </summary>
/// <param name="source">原字符串</param>
/// <param name="str2">待清除的字符串,如空格</param>
/// <returns></returns>
#endregion
public static string FilterStringArray(string source, string str2)
{
source = source.Replace(str2, "");
if (source != "")
{
source = source.Replace(",,", ",");
if (source[0].ToString() == ",")
{
source = source.Substring(1, source.Length - 1);
}
if (source[source.Length - 1].ToString() == ",")
{
source = source.Substring(0, source.Length - 1);
}
}
return source;
}
#endregion
#region 字符串组合
#region 返回年月日时分秒组合的字符串
/**/
/// <summary>
/// 返回年月日时分秒组合的字符串,如:20050424143012
/// </summary>
/// <param name="splitString">中间间隔的字符串,如2005/04/24/14/30/12。可以用来建立目录时使用</param>
/// <returns></returns>
#endregion
public static string GetTimeString()
{
//DateTime now = DateTime.Now;
//StringBuilder sb = new StringBuilder();
//sb.Append(now.Year.ToString("0000"));
//sb.Append(splitString);
//sb.Append(now.Month.ToString("00"));
//sb.Append(splitString);
//sb.Append(now.Day.ToString("00"));
//sb.Append(splitString);
//sb.Append(now.Hour.ToString("00"));
//sb.Append(splitString);
//sb.Append(now.Minute.ToString("00"));
//sb.Append(splitString);
//sb.Append(now.Second.ToString("00"));
string kk=Convert.ToString(DateTime.Now.ToString("d")).Trim().Replace("-", "").Replace("/", "2") + Convert.ToString(DateTime.Now.ToString("T")).Trim().Replace(":", "").Replace(" ", "5");
return kk;
}
#region 返回年月日时分秒组合的字符串
/**/
/// <summary>
/// 返回年月日组合的字符串,如:20050424 (2005年4月24日)
/// </summary>
/// <param name="splitString">中间间隔的字符串,如2005/04/24 可以用来建立目录时使用</param>
/// <returns></returns>
#endregion
public static string GetDateString()
{
//DateTime now = DateTime.Now;
//StringBuilder sb = new StringBuilder();
//sb.Append(now.Year.ToString("0000"));
//sb.Append(splitString);
//sb.Append(now.Month.ToString("00"));
//sb.Append(splitString);
//sb.Append(now.Day.ToString("00"));
string kk = Convert.ToString(DateTime.Now.ToString("d")).Trim().Replace("-", "").Replace("/", "2") + Convert.ToString(DateTime.Now.ToString("T")).Trim().Replace(":", "").Replace(" ", "5");
return kk;
}
#endregion
#region 随机字符串,随机数
private static string _LowerChar = "abcdefghijklmnopqrstuvwxyz";
private static string _UpperChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static string _NumberChar = "0123456789";
#region 获取种子
/**/
/// <summary>
/// 使用RNGCryptoServiceProvider 做种,可以在一秒内产生的随机数重复率非常
/// 的低,对于以往使用时间做种的方法是个升级
/// </summary>
/// <returns></returns>
#endregion
public static int GetNewSeed()
{
byte[] rndBytes = new byte[4];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(rndBytes);
return BitConverter.ToInt32(rndBytes, 0);
}
#region 取得指定范围内的数字随几数
/**/
/// <summary>
/// 取得指定范围内的随几数
/// </summary>
/// <param name="startNumber">下限数</param>
/// <param name="endNumber">上限数</param>
/// <returns>int</returns>
#endregion
public static int GetRandomNumber(int startNumber, int endNumber)
{
Random bjRandom = new Random(GetNewSeed());
int r = objRandom.Next(startNumber, endNumber);
return r;
}
#region 获取指定 ASCII 范围内的随机字符串
/**/
/// <summary>
/// 获取指定 ASCII 范围内的随机字符串
/// </summary>
/// <param name="resultLength">结果字符串长度</param>
/// <param name="startNumber"> 开始的ASCII值 如(33-125)中的 33</param>
/// <param name="endNumber"> 结束的ASCII值 如(33-125)中的 125</param>
/// <returns></returns>
#endregion
public static string GetRandomStringByASCII(int resultLength, int startNumber, int endNumber)
{
System.Random bjRandom = new System.Random(GetNewSeed());
string result = null;
for (int i = 0; i < resultLength; i++)
{
result += (char)objRandom.Next(startNumber, endNumber);
}
return result;
}
#region 从指定字符串中抽取指定长度的随机字符串
/**/
/// <summary>
/// 从指定字符串中抽取指定长度的随机字符串
/// </summary>
/// <param name="source">源字符串</param>
/// <param name="resultLength">待获取随机字符串长度</param>
/// <returns></returns>
#endregion
private static string GetRandomString(string source, int resultLength)
{
System.Random bjRandom = new System.Random(GetNewSeed());
string result = null;
for (int i = 0; i < resultLength; i++)
{
result += source.Substring(objRandom.Next(0, source.Length - 1), 1);
}
return result;
}
#region 获取指定长度随机的数字字符串
/**/
/// <summary>
/// 获取指定长度随机的数字字符串
/// </summary>
/// <param name="resultLength">待获取随机字符串长度</param>
/// <returns></returns>
#endregion
public static string GetRandomNumberString(int resultLength)
{
return GetRandomString(_NumberChar, resultLength);
}
#region 获取指定长度随机的字母字符串(包含大小写字母)
/**/
/// <summary>
/// 获取指定长度随机的字母字符串(包含大小写字母)
/// </summary>
/// <param name="resultLength">待获取随机字符串长度</param>
/// <returns></returns>
#endregion
public static string GetRandomLetterString(int resultLength)
{
return GetRandomString(_LowerChar + _UpperChar, resultLength);
}
#region 获取指定长度随机的字母+数字混和字符串(包含大小写字母)
/**/
/// <summary>
/// 获取指定长度随机的字母+数字混和字符串(包含大小写字母)
/// </summary>
/// <param name="resultLength">待获取随机字符串长度</param>
/// <returns></returns>
#endregion
public static string GetRandomMixString(int resultLength)
{
return GetRandomString(_LowerChar + _UpperChar + _NumberChar, resultLength);
}
#endregion
#region 字符串验证
#region 判断字符串是否为整型
/**/
/// <summary>
/// 判断字符串是否为整型
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
#endregion
public static bool IsInteger(string source)
{
if (source == null || source == "")
{
return false;
}
if (Regex.IsMatch(source, "^((//+)//d)?//d*$"))
{
return true;
}
else
{
return false;
}
}
#region Email 格式是否合法
/**/
/// <summary>
/// Email 格式是否合法
/// </summary>
/// <param name="strEmail"></param>
#endregion
public static bool IsEmail(string strEmail)
{
return Regex.IsMatch(strEmail, @"^/w+((-/w+)|(/./w+))*/@[A-Za-z0-9]+((/.|-)[A-Za-z0-9]+)*/.[A-Za-z0-9]+$");
}
#region 判断是否IP
/**/
/// <summary>
/// 判断是否IP
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
#endregion
public static bool IsIP(string source)
{
return Regex.IsMatch(source, @"^(((25[0-5]|2[0-4][0-9]|19[0-1]|19[3-9]|18[0-9]|17[0-1]|17[3-9]|1[0-6][0-9]|1[1-9]|[2-9][0-9]|[0-9])/.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|(192/.(25[0-5]|2[0-4][0-9]|16[0-7]|169|1[0-5][0-9]|1[7-9][0-9]|[1-9][0-9]|[0-9]))|(172/.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|1[0-5]|3[2-9]|[4-9][0-9]|[0-9])))/.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])/.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$");
}
#region 检查字符串是否为A-Z、0-9及下划线以内的字符
/**/
/// <summary>
/// 检查字符串是否为A-Z、0-9及下划线以内的字符
/// </summary>
/// <param name="str">被检查的字符串</param>
/// <returns>是否有特殊字符</returns>
#endregion
public static bool IsLetterOrNumber(string str)
{
bool b = System.Text.RegularExpressions.Regex.IsMatch(str, "[a-zA-Z0-9_]");
return b;
}
#region 验输入字符串是否含有“//<>:.?*|$]”特殊字符
/**/
/// <summary>
/// 验输入字符串是否含有“//:.?*|$]”特殊字符
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
#endregion
public static bool IsSpecialChar(string source)
{
Regex r = new Regex(@"[//<>:.?*|$]");
return r.IsMatch(source);
}
#region 是否全为中文/日文/韩文字符
/**/
/// <summary>
/// 是否全为中文/日文/韩文字符
/// </summary>
/// <param name="source">源字符串</param>
/// <returns></returns>
#endregion
public static bool IsChineseChar(string source)
{
//中文/日文/韩文: [/u4E00-/u9FA5]
//英文:[a-zA-Z]
return Regex.IsMatch(source, @"^[/u4E00-/u9FA5]+$");
}
#region 是否包含双字节字符(允许有单字节字符)
/**/
/// <summary>
/// 是否包含双字节字符(允许有单字节字符)
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
#endregion
public static bool IsDoubleChar(string source)
{
return Regex.IsMatch(source, @"[^/x00-/xff]");
}
#region 是否为日期型字符串
/**/
/// <summary>
/// 是否为日期型字符串
/// </summary>
/// <param name="source">日期字符串(2005-6-30)</param>
/// <returns></returns>
#endregion
public static bool IsDate(string source)
{
return Regex.IsMatch(source, @"^((((1[6-9]|[2-9]/d)/d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]/d|3[01]))|(((1[6-9]|[2-9]/d)/d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]/d|30))|(((1[6-9]|[2-9]/d)/d{2})-0?2-(0?[1-9]|1/d|2[0-8]))|(((1[6-9]|[2-9]/d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$");
}
#region 是否为时间型字符串
/**/
/// <summary>
/// 是否为时间型字符串
/// </summary>
/// <param name="source">时间字符串(15:00:00)</param>
/// <returns></returns>
#endregion
public static bool IsTime(string source)
{
return Regex.IsMatch(source, @"^((20|21|22|23|[0-1]?/d):[0-5]?/d:[0-5]?/d)$");
}
#region 是否为日期+时间型字符串
/**/
/// <summary>
/// 是否为日期+时间型字符串
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
#endregion
public static bool IsDateTime(string source)
{
return Regex.IsMatch(source, @"^((((1[6-9]|[2-9]/d)/d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]/d|3[01]))|(((1[6-9]|[2-9]/d)/d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]/d|30))|(((1[6-9]|[2-9]/d)/d{2})-0?2-(0?[1-9]|1/d|2[0-8]))|(((1[6-9]|[2-9]/d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) ((20|21|22|23|[0-1]?/d):[0-5]?/d:[0-5]?/d)$");
}
#region 是否为钱币型数据
/**/
/// <summary>
/// 是否为钱币型数据
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
#endregion
public static bool IsMoney(string source)
{
return false;
}
#endregion
#region 字符串截取
#region 获取字符串的实际长度(按单字节)
/**/
/// <summary>
/// 获取字符串的实际长度(按单字节)
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
#endregion
public static int GetRealLength(string source)
{
return System.Text.Encoding.Default.GetByteCount(source);
}
#region 取得固定长度的字符串(按单字节截取)
/**/
/// <summary>
/// 取得固定长度的字符串(按单字节截取)。
/// </summary>
/// <param name="source">源字符串</param>
/// <param name="resultLength">截取长度</param>
/// <returns></returns>
#endregion
public static string SubString(string source, int resultLength)
{
//判断字符串长度是否大于截断长度
if (System.Text.Encoding.Default.GetByteCount(source) > resultLength)
{
//判断字串是否为空
if (source == null)
{
return "";
}
//初始化
int i = 0, j = 0;
//为汉字或全脚符号长度加2否则加1
foreach (char newChar in source)
{
if ((int)newChar > 127)
{
i += 2;
}
else
{
i++;
}
if (i > resultLength)
{
source = source.Substring(0, j);
break;
}
j++;
}
}
return source;
}
#region 按长度分割字符串
/**/
/// <summary>
/// 按长度分割字符串,如短信
/// </summary>
/// <param name="str"></param>
/// <param name="len"></param>
/// <returns></returns>
#endregion
private ArrayList SplitStringByLength(string str, int len)
{
ArrayList arrBlock = new ArrayList();
int intBlockCount = str.Length / len;
if (str.Length % len != 0)
{
for (int i = 0; i <= intBlockCount; i++)