實現效果
- 本輔助類主要是用來方便實現各種輸入格式驗證操作。
- 格式驗證包括各種數字格式、中文檢測、身份證、郵件、郵政編碼、固定電話、手機、URL地址、IP地址、日期格式、GUID、Base64編碼等格式驗證。
- 本輔助類採用各種經過驗證的正則表達式進行匹配,具有高效、準確的特點,請放心使用。
實現步驟
在代碼引用相關的代碼實現動態調用。
實現代碼
- 輔助類提供的方法接口如下所示:
/// 電子郵件正則表達式
public static readonly string EmailRegex = @"^([a-z0-9_.-]+)@([da-z.-]+).([a-z.]{2,6})$";
// @"^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$";//w 英文字母或數字的字符串,和 [a-zA-Z0-9] 語法一樣
/// 檢測是否有中文字符正則表達式
public static readonly string CHZNRegex = "[一-龥]";
/// 檢測用戶名格式是否有效(只能是漢字、字母、下劃線、數字)
public static readonly string UserNameRegex = @"^([一-龥A-Za-z_0-9]{0,})$";
/// 密碼有效性正則表達式(僅包含字符數字下劃線)6~16位
public static readonly string PasswordCharNumberRegex = @"^[A-Za-z_0-9]{6,16}$";
/// 密碼有效性正則表達式(純數字或者純字母,不通過) 6~16位
public static readonly string PasswordRegex = @"^(?=.*d)(?=.*[a-z])(?=.*[A-Z])(?!.*s).{6,16}$";
/// INT類型數字正則表達式
public static readonly string ValidIntRegex = @"^[1-9]d*.?[0]*$";
/// 是否數字正則表達式
public static readonly string NumericRegex = @"^[-]?d+[.]?d*$";
/// 是否整數字正則表達式
public static readonly string NumberRegex = @"^[0-9]+$";
/// 是否整數正則表達式(可帶帶正負號)
public static readonly string NumberSignRegex = @"^[+-]?[0-9]+$";
/// 是否是浮點數正則表達式
public static readonly string DecimalRegex = "^[0-9]+[.]?[0-9]+$";
/// 是否是浮點數正則表達式(可帶正負號)
public static readonly string DecimalSignRegex = "^[+-]?[0-9]+[.]?[0-9]+$";//等價於^[+-]?d+[.]?d+$
/// 固定電話正則表達式
public static readonly string PhoneRegex = @"^((d{3,4})|d{3,4}-)?d{7,8}$";
/// 移動電話正則表達式
public static readonly string MobileRegex = @"^(13|15|18)d{9}$";
/// 固定電話、移動電話正則表達式
public static readonly string PhoneMobileRegex = @"^((d{3,4})|d{3,4}-)?d{7,8}$|^(13|15|18)d{9}$";
/// 身份證15位正則表達式
public static readonly string ID15Regex = @"^[1-9]d{7}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{3}$";
/// 身份證18位正則表達式
public static readonly string ID18Regex = @"^[1-9]d{5}[1-9]d{3}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])((d{4})|d{3}[A-Z])$";
/// URL正則表達式
public static readonly string UrlRegex = @"(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]*[-A-Za-z0-9+&@#/%=~_|]";
/// IP正則表達式
public static readonly string IPRegex = @"^((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)$";
/// <summary>
/// Base64編碼正則表達式。
/// 大小寫字母各26個,加上10個數字,和加號“+”,斜槓“/”,一共64個字符,等號“=”用來作爲後綴用途
public static readonly string Base64Regex = @"[A-Za-z0-9+/=]";
/// 是否爲純字符的正則表達式
public static readonly string LetterRegex = @"^[A-Za-z]+$";
/// GUID正則表達式
public static readonly string GuidRegex = "[A-F0-9]{8}(-[A-F0-9]{4}){3}-[A-F0-9]{12}|[A-F0-9]{32}";
/// 驗證輸入字符串是否與模式字符串匹配,匹配返回true
public static bool IsMatch(string input, string pattern)
/// 驗證輸入字符串是否與模式字符串匹配,匹配返回true
public static bool IsMatch(string input, string pattern, RegexOptions options)
/// 返回字符串真實長度, 1個漢字長度爲2
public static int GetStringLength(string stringValue)
/// 檢測用戶名格式是否有效
public static bool IsValidUserName(string userName)
/// 密碼有效性(純數字或者純字母,不通過)
public static bool IsValidPassword(string password)
/// int有效性
public static bool IsValidInt(string val)
/// 是否數字字符串
public static bool IsNumeric(string inputData)
/// 是否整數字符串
public static bool IsNumber(string inputData)
/// 是否整數字符串(帶正負號)
public static bool IsNumberSign(string inputData)
/// 是否是浮點數
public static bool IsDecimal(string inputData)
/// 是否是浮點數 可帶正負號
public static bool IsDecimalSign(string inputData)
/// 檢測是否有中文字符
public static bool IsHasCHZN(string inputData)
/// 檢測含有中文字符串的實際長度
public static int GetCHZNLength(string inputData)
/// 驗證輸入字母 "^[A-Za-z]+$"
public bool IsLetter(string inputData)
/// 驗證身份證是否合法 15 和 18位兩種
public static bool IsIdCard(string idCard)
/// 是否是郵件地址
public static bool IsEmail(string inputData)
/// 郵編有效性
public static bool IsValidZip(string zip)
/// 固定電話有效性
public static bool IsValidPhone(string phone)
/// 手機有效性
public static bool IsValidMobile(string mobile)
/// 電話有效性(固話和手機 )
public static bool IsValidPhoneAndMobile(string number)
/// Url有效性
public static bool IsValidURL(string url)
/// IP有效性
public static bool IsValidIP(string ip)
/// domain 有效性
public static bool IsValidDomain(string host)
/// 判斷是否爲base64字符串
public static bool IsBase64String(string str)
/// 驗證字符串是否是GUID
public static bool IsGuid(string guid)
/// 判斷輸入的字符是否爲日期
public static bool IsDate(string strValue)
/// 判斷輸入的字符是否爲日期,如2004-07-12 14:25|||1900-01-01 00:00|||9999-12-31 23:59
public static bool IsDateHourMinute(string strValue)
/// 檢查字符串最大長度,返回指定長度的串
public static string CheckMathLength(string inputData, int maxLength)
/// 轉換成 HTML code
public static string Encode(string str)
///解析html成 普通文本
public static string Decode(string str)
- 輔助類ValidateUtil的使用例子代碼如下所示:
string[] qunList = lineString.Split(new char[] { '1', ':', 'a ' });
foreach (string qunNumber in qunList)
{
if (!string.IsNullOrEmpty(qunNumber) && ValidateUtil.IsNumber(qunNumber))
{
if (!QunDict.ContainsKey(qunNumber))
{
this.lstItems.Invoke(new MethodInvoker(delegate()
{
this.lstItems.Items.Add(qunNumber);
this.lstItems.Refresh();
}));
QunDict.Add(qunNumber, qunNumber);
}
else
{
skipCount++;
}
}
}
附上源碼
/// <summary>
/// 各種輸入格式驗證輔助類
/// </summary>
public class ValidateUtil
{
#region 正則表達式
/// <summary>
/// 電子郵件正則表達式
/// </summary>
public static readonly string EmailRegex = @"^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$";
// @"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$";//w 英文字母或數字的字符串,和 [a-zA-Z0-9] 語法一樣
/// <summary>
/// 檢測是否有中文字符正則表達式
/// </summary>
public static readonly string CHZNRegex = "[\u4e00-\u9fa5]";
/// <summary>
/// 檢測用戶名格式是否有效(只能是漢字、字母、下劃線、數字)
/// </summary>
public static readonly string UserNameRegex = @"^([\u4e00-\u9fa5A-Za-z_0-9]{0,})$";
/// <summary>
/// 密碼有效性正則表達式(僅包含字符數字下劃線)6~16位
/// </summary>
public static readonly string PasswordCharNumberRegex = @"^[A-Za-z_0-9]{6,16}$";
/// <summary>
/// 密碼有效性正則表達式(純數字或者純字母,不通過) 6~16位
/// </summary>
public static readonly string PasswordRegex = @"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).{6,16}$";
/// <summary>
/// INT類型數字正則表達式
/// </summary>
public static readonly string ValidIntRegex = @"^[1-9]\d*\.?[0]*$";
/// <summary>
/// 是否數字正則表達式
/// </summary>
public static readonly string NumericRegex = @"^[-]?\d+[.]?\d*$";
/// <summary>
/// 是否整數字正則表達式
/// </summary>
public static readonly string NumberRegex = @"^[0-9]+$";
/// <summary>
/// 是否整數正則表達式(可帶帶正負號)
/// </summary>
public static readonly string NumberSignRegex = @"^[+-]?[0-9]+$";
/// <summary>
/// 是否是浮點數正則表達式
/// </summary>
public static readonly string DecimalRegex = "^[0-9]+[.]?[0-9]+$";
/// <summary>
/// 是否是浮點數正則表達式(可帶正負號)
/// </summary>
public static readonly string DecimalSignRegex = "^[+-]?[0-9]+[.]?[0-9]+$";//等價於^[+-]?\d+[.]?\d+$
/// <summary>
/// 固定電話正則表達式
/// </summary>
public static readonly string PhoneRegex = @"^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$";
/// <summary>
/// 移動電話正則表達式
/// </summary>
public static readonly string MobileRegex = @"^(13|15|18)\d{9}$";
/// <summary>
/// 固定電話、移動電話正則表達式
/// </summary>
public static readonly string PhoneMobileRegex = @"^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$|^(13|15|18)\d{9}$";
/// <summary>
/// 身份證15位正則表達式
/// </summary>
public static readonly string ID15Regex = @"^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$";
/// <summary>
/// 身份證18位正則表達式
/// </summary>
public static readonly string ID18Regex = @"^[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])$";
/// <summary>
/// URL正則表達式
/// </summary>
public static readonly string UrlRegex = @"\b(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]*[-A-Za-z0-9+&@#/%=~_|]";
/// <summary>
/// IP正則表達式
/// </summary>
public static readonly string IPRegex = @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$";
/// <summary>
/// Base64編碼正則表達式。
/// 大小寫字母各26個,加上10個數字,和加號“+”,斜槓“/”,一共64個字符,等號“=”用來作爲後綴用途
/// </summary>
public static readonly string Base64Regex = @"[A-Za-z0-9\+\/\=]";
/// <summary>
/// 是否爲純字符的正則表達式
/// </summary>
public static readonly string LetterRegex = @"^[A-Za-z]+$";
/// <summary>
/// GUID正則表達式
/// </summary>
public static readonly string GuidRegex = "[A-F0-9]{8}(-[A-F0-9]{4}){3}-[A-F0-9]{12}|[A-F0-9]{32}";
#endregion
#region 驗證輸入字符串是否與模式字符串匹配
/// <summary>
/// 驗證輸入字符串是否與模式字符串匹配,匹配返回true
/// </summary>
/// <param name="input">輸入字符串</param>
/// <param name="pattern">模式字符串</param>
public static bool IsMatch(string input, string pattern)
{
return IsMatch(input, pattern, RegexOptions.IgnoreCase);
}
/// <summary>
/// 驗證輸入字符串是否與模式字符串匹配,匹配返回true
/// </summary>
/// <param name="input">輸入的字符串</param>
/// <param name="pattern">模式字符串</param>
/// <param name="options">篩選條件</param>
public static bool IsMatch(string input, string pattern, RegexOptions options)
{
return Regex.IsMatch(input, pattern, options);
}
#endregion
#region 用戶名密碼格式
/// <summary>
/// 返回字符串真實長度, 1個漢字長度爲2
/// </summary>
/// <returns>字符長度</returns>
public static int GetStringLength(string stringValue)
{
return Encoding.Default.GetBytes(stringValue).Length;
}
/// <summary>
/// 檢測用戶名格式是否有效
/// </summary>
/// <param name="userName">用戶名</param>
/// <returns></returns>
public static bool IsValidUserName(string userName)
{
int userNameLength = GetStringLength(userName);
if (userNameLength >= 4 && userNameLength <= 20 && Regex.IsMatch(userName, UserNameRegex))
{ // 判斷用戶名的長度(4-20個字符)及內容(只能是漢字、字母、下劃線、數字)是否合法
return true;
}
else
{
return false;
}
}
/// <summary>
/// 密碼有效性(純數字或者純字母,不通過)
/// </summary>
/// <param name="password">密碼字符串</param>
/// <returns></returns>
public static bool IsValidPassword(string password)
{
return Regex.IsMatch(password, PasswordRegex);
}
#endregion
#region 數字字符串檢查
/// <summary>
/// int有效性
/// </summary>
static public bool IsValidInt(string val)
{
return Regex.IsMatch(val, ValidIntRegex);
}
/// <summary>
/// 是否數字字符串
/// </summary>
/// <param name="inputData">輸入字符串</param>
/// <returns></returns>
public static bool IsNumeric(string inputData)
{
Regex RegNumeric = new Regex(NumericRegex);
Match m = RegNumeric.Match(inputData);
return m.Success;
}
/// <summary>
/// 是否整數字符串
/// </summary>
/// <param name="inputData">輸入字符串</param>
/// <returns></returns>
public static bool IsNumber(string inputData)
{
Regex RegNumber = new Regex(NumberRegex);
Match m = RegNumber.Match(inputData);
return m.Success;
}
/// <summary>
/// 是否整數字符串(帶正負號)
/// </summary>
/// <param name="inputData">輸入字符串</param>
/// <returns></returns>
public static bool IsNumberSign(string inputData)
{
Regex RegNumberSign = new Regex(NumberSignRegex);
Match m = RegNumberSign.Match(inputData);
return m.Success;
}
/// <summary>
/// 是否是浮點數
/// </summary>
/// <param name="inputData">輸入字符串</param>
/// <returns></returns>
public static bool IsDecimal(string inputData)
{
Regex RegDecimal = new Regex(DecimalRegex);
Match m = RegDecimal.Match(inputData);
return m.Success;
}
/// <summary>
/// 是否是浮點數 可帶正負號
/// </summary>
/// <param name="inputData">輸入字符串</param>
/// <returns></returns>
public static bool IsDecimalSign(string inputData)
{
Regex RegDecimalSign = new Regex(DecimalSignRegex);
Match m = RegDecimalSign.Match(inputData);
return m.Success;
}
#endregion
#region 中文檢測
/// <summary>
/// 檢測是否有中文字符
/// </summary>
public static bool IsHasCHZN(string inputData)
{
Regex RegCHZN = new Regex(CHZNRegex);
Match m = RegCHZN.Match(inputData);
return m.Success;
}
/// <summary>
/// 檢測含有中文字符串的實際長度
/// </summary>
/// <param name="inputData">字符串</param>
public static int GetCHZNLength(string inputData)
{
System.Text.ASCIIEncoding n = new System.Text.ASCIIEncoding();
byte[] bytes = n.GetBytes(inputData);
int length = 0; // l 爲字符串之實際長度
for (int i = 0; i <= bytes.Length - 1; i++)
{
if (bytes[i] == 63) //判斷是否爲漢字或全腳符號
{
length++;
}
length++;
}
return length;
}
#endregion
#region 常用格式
/// <summary>
/// 驗證輸入字母 "^[A-Za-z]+$"
/// </summary>
/// <param name="inputData">輸入字符串</param>
/// <returns></returns>
public bool IsLetter(string inputData)
{
return Regex.IsMatch(inputData, LetterRegex);
}
/// <summary>
/// 驗證身份證是否合法 15 和 18位兩種
/// </summary>
/// <param name="idCard">要驗證的身份證</param>
public static bool IsIdCard(string idCard)
{
if (string.IsNullOrEmpty(idCard))
{
return false;
}
if (idCard.Length == 15)
{
return Regex.IsMatch(idCard, ID15Regex);
}
else if (idCard.Length == 18)
{
return Regex.IsMatch(idCard, ID18Regex, RegexOptions.IgnoreCase);
}
else
{
return false;
}
}
/// <summary>
/// 是否是郵件地址
/// </summary>
/// <param name="inputData">輸入字符串</param>
/// <returns></returns>
public static bool IsEmail(string inputData)
{
Regex RegEmail = new Regex(EmailRegex);
Match m = RegEmail.Match(inputData);
return m.Success;
}
/// <summary>
/// 郵編有效性
/// </summary>
public static bool IsValidZip(string zip)
{
Regex rx = new Regex(@"^\d{6}$", RegexOptions.None);
Match m = rx.Match(zip);
return m.Success;
}
/// <summary>
/// 固定電話有效性
/// </summary>
public static bool IsValidPhone(string phone)
{
Regex rx = new Regex(PhoneRegex, RegexOptions.None);
Match m = rx.Match(phone);
return m.Success;
}
/// <summary>
/// 手機有效性
/// </summary>
public static bool IsValidMobile(string mobile)
{
Regex rx = new Regex(MobileRegex, RegexOptions.None);
Match m = rx.Match(mobile);
return m.Success;
}
/// <summary>
/// 電話有效性(固話和手機 )
/// </summary>
public static bool IsValidPhoneAndMobile(string number)
{
Regex rx = new Regex(PhoneMobileRegex, RegexOptions.None);
Match m = rx.Match(number);
return m.Success;
}
/// <summary>
/// Url有效性
/// </summary>
public static bool IsValidURL(string url)
{
return Regex.IsMatch(url, UrlRegex);
}
/// <summary>
/// IP有效性
/// </summary>
public static bool IsValidIP(string ip)
{
return Regex.IsMatch(ip, IPRegex);
}
/// <summary>
/// domain 有效性
/// </summary>
/// <param name="host">域名</param>
/// <returns></returns>
public static bool IsValidDomain(string host)
{
Regex r = new Regex(@"^\d+$");
if (host.IndexOf(".") == -1)
{
return false;
}
return r.IsMatch(host.Replace(".", string.Empty)) ? false : true;
}
/// <summary>
/// 判斷是否爲base64字符串
/// </summary>
public static bool IsBase64String(string str)
{
return Regex.IsMatch(str, Base64Regex);
}
/// <summary>
/// 驗證字符串是否是GUID
/// </summary>
/// <param name="guid">字符串</param>
/// <returns></returns>
public static bool IsGuid(string guid)
{
if (string.IsNullOrEmpty(guid))
return false;
return Regex.IsMatch(guid, GuidRegex, RegexOptions.IgnoreCase);
}
#endregion
#region 日期檢查
/// <summary>
/// 判斷輸入的字符是否爲日期
/// </summary>
public static bool IsDate(string strValue)
{
return Regex.IsMatch(strValue, @"^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))");
}
/// <summary>
/// 判斷輸入的字符是否爲日期,如2004-07-12 14:25|||1900-01-01 00:00|||9999-12-31 23:59
/// </summary>
public static bool IsDateHourMinute(string strValue)
{
return Regex.IsMatch(strValue, @"^(19[0-9]{2}|[2-9][0-9]{3})-((0(1|3|5|7|8)|10|12)-(0[1-9]|1[0-9]|2[0-9]|3[0-1])|(0(4|6|9)|11)-(0[1-9]|1[0-9]|2[0-9]|30)|(02)-(0[1-9]|1[0-9]|2[0-9]))\x20(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){1}$");
}
#endregion
#region 其他
/// <summary>
/// 檢查字符串最大長度,返回指定長度的串
/// </summary>
/// <param name="inputData">輸入字符串</param>
/// <param name="maxLength">最大長度</param>
/// <returns></returns>
public static string CheckMathLength(string inputData, int maxLength)
{
if (inputData != null && inputData != string.Empty)
{
inputData = inputData.Trim();
if (inputData.Length > maxLength)//按最大長度截取字符串
{
inputData = inputData.Substring(0, maxLength);
}
}
return inputData;
}
/// <summary>
/// 轉換成 HTML code
/// </summary>
public static string Encode(string str)
{
str = str.Replace("&", "&");
str = str.Replace("'", "''");
str = str.Replace("\"", """);
str = str.Replace(" ", " ");
str = str.Replace("<", "<");
str = str.Replace(">", ">");
str = str.Replace("\n", "<br>");
return str;
}
/// <summary>
///解析html成 普通文本
/// </summary>
public static string Decode(string str)
{
str = str.Replace("<br>", "\n");
str = str.Replace(">", ">");
str = str.Replace("<", "<");
str = str.Replace(" ", " ");
str = str.Replace(""", "\"");
return str;
}
#endregion
}