/// <summary>
/// 正規表達式相關方法集合
/// </summary>
public static class RegularHelper
{
private const string m_NumberPattm = @"^[-+]?(0{1}|(([1-9]){1}[0-9]{0,6}))?$";
private const string m_NumberPattmTemplate = @"^[-+]?(0{1}|(([1-9]){1}[0-9]{0,digit}))?$";
private const string m_DecimalPattm = @"^[-+]?(0{1}|(([1-9]){1}[0-9]{0,6}))(\.[0-9]{0,2})?$";
private const string m_DecimalPattmTemplate = @"^[-+]?(0{1}|(([1-9]){1}[0-9]{0,intDigit}))(\.[0-9]{0,decimalDigit})?$";
private const string m_EmailPattm = @"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$";
private const string m_StringPattm="^\\w+$";
private const string m_URLPattm = @"^http(s)?://([\w-]+\.?)+[\w-]+(\:\d+)?(/[\w- ./?%&=]*)?$";
private const string m_GUIDPattm = @"^[A-Fa-f0-9]{8}(-[A-Fa-f0-9]{4}){3}-[A-Fa-f0-9]{12}$";
private static Dictionary<string, Regex> m_RegexList = new Dictionary<string, Regex>();
/// <summary>
/// 根據傳入的字元串和提供的正規表達式進行驗證
/// </summary>
/// <param name="input">需要進行驗證的字元串</param>
/// <param name="pattem">驗證時使用的正規表達式</param>
/// <param name="options">正規表達式選項</param>
/// <returns>比對通過傳回true,否則傳回false</returns>
public static bool IsMatch(string input, string pattem, RegexOptions options)
{
Regex reg = null;
lock (typeof(RegularHelper))
{
if (m_RegexList.ContainsKey(pattem))
{
reg = m_RegexList[pattem];
}
else
{
reg = new Regex(pattem, options);
m_RegexList.Add(pattem, reg);
}
}
return reg.IsMatch(input);
}
/// <summary>
/// 根據傳入的字元串和提供的正規表達式進行驗證
/// </summary>
/// <param name="input">需要進行驗證的字元串</param>
/// <param name="pattem">驗證時使用的正規表達式</param>
/// <returns>比對通過傳回true,否則傳回false</returns>
public static bool IsMatch(string input, string pattem)
{
return IsMatch(input, pattem, RegexOptions.IgnoreCase | RegexOptions.Compiled);
}
/// <summary>
/// 檢查輸入的字元串是否是整數,預設7位數
/// </summary>
/// <param name="input">輸入的字元串</param>
/// <returns>比對通過傳回true,否則傳回false</returns>
public static bool IsNumber(string input)
{
bool result=false;
result = IsMatch(input, m_NumberPattm);
return result;
}
/// <summary>
/// 指定數字長度,進行整數驗證
/// <remarks>如果digit為空或者digit小于等于0,将自動預設使用7位數字驗證</remarks>
/// </summary>
/// <param name="input">輸入的字元串</param>
/// <param name="digit">整數最大位數</param>
/// <returns>比對通過傳回true,否則傳回false</returns>
public static bool IsNumber(string input, int digit)
{
bool result = false;
string pattmTemplate = string.Empty;
if ( digit > 0)
{
pattmTemplate = m_NumberPattmTemplate.Replace("digit",Convert.ToString(digit-1));
}
else
{
pattmTemplate = m_NumberPattm;
}
result = IsMatch(input, pattmTemplate);
return result;
}
/// <summary>
/// 檢查輸入的字元串是否包含小數格式,預設7位整數,2位小數
/// </summary>
/// <param name="input">輸入的字元串</param>
/// <returns>比對通過傳回true,否則傳回false</returns>
public static bool IsDecimal(string input)
{
bool result = false;
result = IsMatch(input, m_DecimalPattm);
return result;
}
/// <summary>
/// 指定小數位數,對輸入字元串進行驗證
/// <remarks>此時整數部分,預設使用最大7位,小數根據使用者指定産生。如果指定的小數位數小于等于0,那麼将采用預設的2位格式驗證</remarks>
/// </summary>
/// <param name="input">輸入的字元串</param>
/// <param name="decimalDigit">小數最大位數</param>
/// <returns>比對通過傳回true,否則傳回false</returns>
public static bool IsDecimal(string input,int decimalDigit)
{
bool result = false;
string pattmTemplate = string.Empty;
if ( decimalDigit > 0)
{
pattmTemplate = m_DecimalPattmTemplate.Replace("decimalDigit", decimalDigit.ToString());
pattmTemplate = pattmTemplate.Replace("intDigit", "6");
}
else
{
pattmTemplate = m_DecimalPattm;
}
result = IsMatch(input, pattmTemplate);
return result;
}
/// <summary>
/// 指定整數位數和小數位數,進行數字驗證
/// <remarks>如果指定的整數位數小于0,那麼将使用預設的7位整數格式
/// 如果指定的小數位數小于0,那麼将使用預設的2位小數格式</remarks>
/// </summary>
/// <param name="input">輸入的字元串</param>
/// <param name="intDigit">整數位數</param>
/// <param name="decimalDigit">小數位數</param>
/// <returns>比對通過傳回true,否則傳回false</returns>
public static bool IsDecimal(string input,int intDigit, int decimalDigit)
{
bool result = false;
string pattmTemplate = string.Empty;
if ( intDigit > 0)
{
pattmTemplate = m_DecimalPattmTemplate.Replace("intDigit", Convert.ToString(intDigit-1));
}
else
{
pattmTemplate = pattmTemplate.Replace("intDigit", "6");
}
if ( decimalDigit > 0)
{
pattmTemplate = pattmTemplate.Replace("decimalDigit", decimalDigit.ToString());
}
else
{
pattmTemplate = pattmTemplate.Replace("decimalDigit", "2");
}
result = IsMatch(input, pattmTemplate);
return result;
}
/// <summary>
/// 驗證輸入字元串是否EMail位址
/// </summary>
/// <param name="input">輸入的字元串</param>
/// <returns>比對通過傳回true,否則傳回false</returns>
public static bool IsEmailAddress(string input)
{
bool result = false;
result = IsMatch(input, m_EmailPattm);
return result;
}
/// <summary>
/// 驗證輸入字元串是否是26個字母+數字+下劃線
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static bool IsCheck(string input)
{
bool result = false;
result = IsMatch(input, m_StringPattm);
return result;
}
/// <summary>
/// 驗證輸入字元串是否是URL
/// </summary>
/// <param name="input">輸入的字元串</param>
/// <returns>比對通過傳回true,否則傳回false</returns>
public static bool IsURL(string input)
{
return IsMatch(input, m_URLPattm);
}
/// <summary>
/// 驗證輸入字元串是否是GUID值
/// </summary>
/// <param name="input">輸入的字元串</param>
/// <returns>比對通過傳回true,否則傳回false</returns>
public static bool IsGuid(string input)
{
return IsMatch(input, m_GUIDPattm);
}
}
如果您覺得本文對你有用,不妨幫忙點個贊,或者在評論裡給我一句贊美,小小成就都是今後繼續為大家編寫優質文章的動力!
歡迎您持續關注我的部落格:)
作者:Ken Wang
出處:http://www.cnblogs.com/Wolfmanlq/
版權所有,歡迎保留原文連結進行轉載:)