?? datacheck.cs
字號:
using System;
using System.Globalization;
using System.Text.RegularExpressions;
namespace DocAdmin.COMMON
{
/// <summary>
/// 用于進行后臺的數據檢測
/// </summary>
public class DataCheck
{
public DataCheck()
{
//
// TODO: 在此處添加構造函數邏輯
//
}
//可檢測的數據類型
public enum DataSort
{
WhiteSpace=1, //空白符
Email, //email
Url, //Internet URL
Integer, //無符號整數
Float, //浮點數
Double, //雙精度
Date, //日期
Time, //時間
DateTime, //日期時間
NotAllowSingleQuote //不允許包含單引號'
}
#region 待檢驗的數據
/// <summary>
/// 待校驗的數據
/// </summary>
public class CheckedData
{
public string data; //待校驗的數據
public string description; //描述
public bool allowWhiteSpace; //允許空
public int maxLength; //最大長度
public DataSort sort; //數據的類別
public CheckedData()
{
this.data = "";
this.description = "";
this.allowWhiteSpace = true;
this.maxLength = 0;
this.sort = 0;
}
/// <summary>
/// 用指定的數據以及約束條件初始化CheckedData的實例,沒有定義要求的數據格式
/// </summary>
/// <param name="data">待檢測的數據</param>
/// <param name="Description">待檢測的數據的描述,在返回的子串中使用</param>
/// <param name="AllowWhiteSpace">是否允許為空字符串</param>
/// <param name="MaxLength">允許的最大長度</param>
public CheckedData(string data, string Description, bool AllowWhiteSpace, int MaxLength)
{
this.data = data;
this.description = Description;
this.allowWhiteSpace = AllowWhiteSpace;
this.maxLength = MaxLength;
this.sort = 0;
}
/// <summary>
/// 用指定的數據以及約束條件初始化CheckedData的實例
/// </summary>
/// <param name="data">待檢測的數據</param>
/// <param name="Description">待檢測的數據的描述,在返回的子串中使用</param>
/// <param name="AllowWhiteSpace">是否允許為空字符串</param>
/// <param name="MaxLength">允許的最大長度</param>
/// <param name="Sort">要求的數據格式,DataSort的枚舉值,0表示任意格式</param>
public CheckedData(string data, string Description, bool AllowWhiteSpace, int MaxLength, DataSort Sort)
{
this.data = data;
this.description = Description;
this.allowWhiteSpace = AllowWhiteSpace;
this.maxLength = MaxLength;
this.sort = Sort;
}
#endregion
#region 數據檢測函數,檢測輸入字符串strInput 是否符合DataSort所指定的類別
/// <summary>
/// 數據檢測函數,檢測輸入字符串strInput 是否符合DataSort所指定的類別
/// </summary>
/// <param name="strInput">輸入的數據</param>
/// <param name="checktype">檢驗的類型</param>
/// <returns></returns>
public static bool DataCheck(string strInput , DataSort checktype)
{
bool ret = false;
string strPattern="";
switch(checktype)
{
case DataSort.WhiteSpace :
//White Space
strPattern = "^\\s*$";
break;
case DataSort.Email :
//email
strPattern = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
break;
case DataSort.Url :
//Internet URL
strPattern = "^([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?$";
break;
case DataSort.Integer :
//任意長度的數字,長度可以為0
strPattern = "^\\d*$";
break;
case DataSort.Float :
//浮點數
ret = CheckedData.IsValidFloat( strInput );
return ret;
case DataSort.Double :
//雙精度
ret = CheckedData.IsValidDouble( strInput );
return ret;
case DataSort.Date :
//檢查日期
strPattern = @"^\d{4}-\d{1,2}-\d{1,2}$";
ret = CheckedData.IsValidDate( strInput );
if( !ret )
return ret;
break;
case DataSort.Time :
//時間格式
strPattern = @"^\d{1,2}:\d{1,2}:\d{1,2}$";
ret = CheckedData.IsValidDate( strInput );
if( !ret )
return ret;
break;
case DataSort.DateTime :
//日期加時間格式
strPattern = @"^\d{4}-\d{1,2}-\d{1,2}\s+\d{1,2}:\d{1,2}:\d{1,2}$";
ret = CheckedData.IsValidDate( strInput );
if( !ret )
return ret;
break;
case DataSort.NotAllowSingleQuote :
//不允許單引號
strPattern = "'";
break;
}
Regex regex = new Regex(strPattern);
Match match = regex.Match(strInput);
if(match.Success)
{
//匹配
ret = true;
}
else
{
ret = false;
}
if( checktype == DataSort.NotAllowSingleQuote )
{
//匹配表示包含單引號,所以返回false
ret = !ret;
}
return ret;
}
#endregion
#region Check 檢測數據是否合法
/// <summary>
/// 檢測數據是否合法
/// </summary>
/// <param name="cd">待校驗的數據Array</param>
/// <returns>合法返回“”,否則返回不合法提示說明,可以直接輸出</returns>
public static string Check(CheckedData[] cd)
{
string ret = "";
string txt = "";
string description = "";
for(int i=0; i<cd.Length; i++)
{
txt = cd[i].data;
description = cd[i].description;
if(!cd[i].allowWhiteSpace)
{
//不允許空
if( CheckedData.DataCheck(txt, DataSort.WhiteSpace) )
{
ret = description + "不允許為空,請輸入!";
continue;
}
}
else
{
//允許為空
if( txt == "" )
{
//而且輸入的值為空,則無需校驗長度和格式
continue;
}
}
if( cd[i].maxLength>0 && CheckedData.LenByte(txt)>cd[i].maxLength )
{
//超過最大長度
ret = description + "超過了最大長度,請核實后重新輸入!";
break;
}
if( cd[i].sort != 0 && !CheckedData.DataCheck(txt, cd[i].sort) )
{
//不符合格式
ret = description + "不符合要求的格式,請核實后重新輸入!";
break;
}
}
return ret;
}
#endregion
#region 驗證方法
/// <summary>
/// 取得字符串的長度——字節數
/// </summary>
/// <param name="input">字符串</param>
/// <returns>字節數</returns>
public static int LenByte(string input)
{
return System.Text.Encoding.Default.GetByteCount(input);
}
/// <summary>
/// 檢驗日期格式
/// </summary>
/// <param name="input">代驗證的字符串</param>
/// <returns>驗證結果</returns>
public static bool IsValidDate(string input)
{
bool ret = false;
try
{
DateTimeFormatInfo d = new DateTimeFormatInfo();
d.FullDateTimePattern = "yyyy-MM-dd";
Convert.ToDateTime( input, d );
ret = true;
}
catch{}
return ret;
}
/// <summary>
/// 檢驗浮點數
/// </summary>
/// <param name="input">代驗證的字符串</param>
/// <returns>驗證結果</returns>
public static bool IsValidFloat(string input)
{
bool ret = false;
try
{
float f = Convert.ToSingle( input );
ret = true;
}
catch{}
return ret;
}
/// <summary>
/// 驗證雙精度浮點數
/// </summary>
/// <param name="input">代驗證的字符串</param>
/// <returns>驗證結果</returns>
public static bool IsValidDouble(string input)
{
bool ret = false;
try
{
double d = Convert.ToDouble( input );
ret = true;
}
catch{}
return ret;
}
#endregion
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -