📄 datacheck.cs
字号:
using System;
using System.Globalization;
using System.Text.RegularExpressions;
namespace HRAdmin.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 + -