using System;
using System.Globalization;
using System.Text.RegularExpressions;
using System.Web;
namespace GT.Common.Helper
{
/// <summary>
/// 正则帮助类。含大量常用正则表达式。
/// </summary>
public class RegexHelper
{
/// <summary>
///
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool IsMobilePhone(string str)
{
return Regex.IsMatch(str, @"(^0?1[3|4|5|7|8][0-9]\d{8}$)");
}
/// <summary>
///
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool IsBase64String(string str)
{
return Regex.IsMatch(str, @"[A-Za-z0-9\+\/\=]");
}
public static bool IsDate(string date)
{
if (string.IsNullOrEmpty(date))
{
return false;
}
DateTime minValue = DateTime.MinValue;
return DateTime.TryParse(date, out minValue);
}
public static bool IsDate(string date, string format)
{
return IsDate(date, format, null, DateTimeStyles.None);
}
public static bool IsDate(string date, string format, IFormatProvider provider, DateTimeStyles styles)
{
if (string.IsNullOrEmpty(date))
{
return false;
}
DateTime minValue = DateTime.MinValue;
return DateTime.TryParseExact(date, format, provider, styles, out minValue);
}
public static bool IsEmail(string email)
{
if (string.IsNullOrEmpty(email))
{
return false;
}
string pattern = @"^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$";
return Regex.IsMatch(email.Trim(), pattern);
}
/// <summary>
///
/// </summary>
/// <param name="guid"></param>
/// <returns></returns>
public static bool IsGuid(string guid)
{
if (string.IsNullOrEmpty(guid))
{
return false;
}
return Regex.IsMatch(guid, "[A-F0-9]{8}(-[A-F0-9]{4}){3}-[A-F0-9]{12}|[A-F0-9]{32}", RegexOptions.IgnoreCase);
}
/// <summary>
///
/// </summary>
/// <param name="idCard"></param>
/// <returns></returns>
public static bool IsIdCard(string idCard)
{
if (string.IsNullOrEmpty(idCard))
{
return false;
}
if (idCard.Length == 15)
{
return Regex.IsMatch(idCard, @"^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$");
}
return ((idCard.Length == 0x12) && Regex.IsMatch(idCard, @"^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[A-Z])$", RegexOptions.IgnoreCase));
}
/// <summary>
///
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static bool IsInt(object number)
{
if (IsNullOrEmpty(number))
{
return false;
}
return IsInt(number.ToString());
}
/// <summary>
///
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static bool IsInt(string number)
{
if (string.IsNullOrEmpty(number))
{
return false;
}
int result = 0;
return int.TryParse(number, out result);
}
public static bool IsIP(string ip)
{
if (string.IsNullOrEmpty(ip))
{
return false;
}
string pattern = @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$";
return Regex.IsMatch(ip.Trim(), pattern);
}
/// <summary>
///
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static bool IsNullOrEmpty(object data)
{
return ((data == null) || (((data.GetType() == typeof(string)) && string.IsNullOrEmpty(data.ToString().Trim())) || (data.GetType() == typeof(DBNull))));
}
/// <summary>
///
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static bool IsNumber(object number)
{
if (IsNullOrEmpty(number))
{
return false;
}
return IsNumber(number.ToString());
}
/// <summary>
///
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static bool IsNumber(string number)
{
if (string.IsNullOrEmpty(number))
{
return false;
}
decimal result = 0M;
return decimal.TryParse(number, out result);
}
/// <summary>
///
/// </summary>
/// <param name="strUrl"></param>
/// <returns></returns>
public static bool IsUrl(string strUrl)
{
return Regex.IsMatch(strUrl, @"^(http|https)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{1,10}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*$", RegexOptions.IgnoreCase);
}
/// <summary>
/// 判断是否是mac地址
/// </summary>
/// <Param name="mac">mac地址字符串</Param>
/// <returns></returns>
public static bool IsMacAddress(string mac)
{
return Regex.IsMatch(mac, "^([0-9A-F]{2}-){5}[0-9A-F]{2}$") || Regex.IsMatch(mac, "^[0-9A-F]{12}$");
}
/// <summary>
/// 去除HTML标记
/// </summary>
/// <param name="htmlString">包括HTML的源码</param>
/// <returns>已经去除后的文字</returns>
public static string RemoveHtml(string htmlString)
{
if (string.IsNullOrWhiteSpace(htmlString))
{
return htmlString;
}
//转换成html标签
htmlString = Regex.Replace(htmlString, @"&(quot|#34);", "\"", RegexOptions.IgnoreCase);
htmlString = Regex.Replace(htmlString, @"&(amp|#38);", "&", RegexOptions.IgnoreCase);
htmlString = Regex.Replace(htmlString, @"&(lt|#60);", "<", RegexOptions.IgnoreCase);
htmlString = Regex.Replace(htmlString, @"&(gt|#62);", ">", RegexOptions.IgnoreCase);
htmlString = Regex.Replace(htmlString, @"&(nbsp|#160);", " ", RegexOptions.IgnoreCase);
htmlString = Regex.Replace(htmlString, @"&(iexcl|#161);", "\xa1", RegexOptions.IgnoreCase);
htmlString = Regex.Replace(htmlString, @"&(cent|#162);", "\xa2", RegexOptions.IgnoreCase);
htmlString = Regex.Replace(htmlString, @"&(pound|#163);", "\xa3", RegexOptions.IgnoreCase);
htmlString = Regex.Replace(htmlString, @"&(copy|#169);", "\xa9", RegexOptions.IgnoreCase);
htmlString = Regex.Replace(htmlString, @"&#(\d+);", "", RegexOptions.IgnoreCase);
//删除脚本
htmlString = Regex.Replace(htmlString, @"<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase);
//删除HTML
htmlString = Regex.Replace(htmlString, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase);
htmlString = Regex.Replace(htmlString, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
htmlString = Regex.Replace(htmlString, @"-->", "", RegexOptions.IgnoreCase);
htmlString = Regex.Replace(htmlString, @"<!--.*", "", RegexOptions.IgnoreCase);
htmlString = htmlString.Replace("<", "");
htmlString = htmlString.Replace(">", "");
htmlString = htmlString.Replace("\r\n", "");
htmlString = htmlString.Replace(" ", "");
if (HttpContext.Current != null)
{
htmlString = HttpContext.Current.Server.HtmlEncode(htmlString).Trim();
}
return htmlString;
}
/// <summary>
/// 获取字节数
/// str:需要获取的字符串
/// </summary>
public static int Length(string str)
{
if (string.IsNullOrWhiteSpace(str))
{
return 0;
}
int j = 0;
CharEnumerator ce = str.GetEnumerator();
while (ce.MoveNext())
{
j += (ce.Current > 0 && ce.Current < 255) ? 1 : 2;
}
return j;
}
/// <summary>
/// 按字节数截取指定字节
/// </summary>
/// <Param name="str">需要获取的字符串</Param>
/// <Param name="length">获取的字节长度</Param>
/// <returns></returns>
[Obsolete("该方法已移至StringHelper")]
public static string SubString(string str, int length)
{
if (string.IsNullOrWhiteSpace(str))
{
return str;
}
string result = str;
int j = 0, k = 0;
CharEnumerator ce = str.GetEnumerator();
while (ce.MoveNext())
{
j += (ce.Current > 0 && ce.Current < 255) ? 1 : 2;
if (j <= length)
{
k++;
}
else
{
result = str.Substring(0, k);
break;
}
}
return result;
}
}
}