//LastTime 1.3 Edition -----------------------------
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 版本说明 edition explain
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
/*
* 1.2 版本
* ------------------------------------------------------------------------------
* 1>新加入 是否必须验证,默认是不必须验证的,设计 IsRequest 为true 后就为必须验证了
* 使用方法:小数带参数|@abc<3-2>
* 控件名前加入 @ 即可
*
* 2>日期验证 DateTime 类别 命令=日期|控件名
*
* ERROR:出现了 限制输入验证时不正确的情况
* Date :2005-4-29
* 1>DateTime 的限制输入时什么都输入不了
* 2>Url 等等在限制输入时一定也有这种情况
* 3>限制输入只能用于检测 输入是 数字还是 字符 的情况。
* ErrorModify: 应把这类的 验证都识别为 [All]类型的验证
*
* 1.2.1
* ---------------------------------------------------------------------------------
* 新加入DateTime的另一个控件,可以选择分的控件
*
* 1.3 2005-5-4
* ---------------------------------------------------------------------------------
* 对控件加入服务器端的验证
* 可以防止在JAVASCRIPT出现错误或失效后,影响程序的正常运行!
* 用validate() 来验证, 运行是一个原理利用 Regex 来验证,但是服务器端的.新加入一个新的函数即可.
*
* 新问题:
* -------------
* 发现在小数限制时当小于2 <2,3>时, 验证为-1晕
*
*/
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 版权说明 copyright explain
/*
* Create By Liangzhimy
* 任何单位或个人都可以更改并更新本版本,但更新后的版本请发送到mailto:|@abc<3-2中确认。
* 任何单位或个人都可以分发此验证版本,但请保留版权信息
*/
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 说明
/*
* create by liangzhimy
* 2005-4-20
*
* 用于验证的类
* 可以扩展的内容有
* 1 可以加入验证的js的位置
* 2 未加入日期验证
* string commandtext="不为空|TextBox1\\小数后留两位|TextBox2,TextBox3,TextBox5,TextBox6,TextBox7,TextBox8,TextBox9,TextBox10,TextBox11,dl,cl\\整型|TextBox4";
*
* 新的需求,要求限制输入的长度, 如果是小数点的话可以限制输入的 小数位
* 如
*
* 先设计一个属性, 表示都使用两种验证
* 不为空|TextBox1<4>\\小数后留两位|TextBox2<4,2>
*
* 关系到几个正则
* 1 限制长度 ^[A-Za-z\u0391-\uFFE5\d]{length}$
* 2 小数限制,整个长度,及其小数位数
*
* 限制长度
* 1> ^[A-Za-z\u0391-\uFFE5\d]{length}$
* 2> ^\w{length}$
*
*
*
* 小数限制 整个长度,及其小数位数 length 整个长度 decimallen 小数位长度
* ^(0|[1-9]\\d{0,3})(file://.//d{0,2})?$
* [restrict]
* 注 当是[all] 类型的验证时 新添加类别时要在相应的js里也添加相就相应的类别'
*
* 不为空|TextBox1<4>\\小数后留两位|TextBox2<4-2-3-4-5>
* 小数带参数|abc<3-2>,cc<4-5>\\限制长度|l<3>,b<3>,c<4>,d<5>
*
* 问题:中文输入时的问题, 在验证时无法进行正确的验证 已经解决, 为预留的类型 LmitB
*
*
*
*/
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using System;
using System.Web;
using System.Web.UI;
using System.Collections;
using System.Text.RegularExpressions;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
namespace PDWY.Tools
{
#region 枚举类别
/// <summary>
/// 两种验证的方法, ALL提交时验证 Restrict输入时验证
/// </summary>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public enum Type
{
/// <summary>
/// 提交时验证
/// </summary>
All,
/// <summary>
/// 输入时验证
/// </summary>
Restrict,
/// <summary>
/// 两种验证方式都可以
/// </summary>
ANY
}
/// <summary>
/// 验证的类别
/// </summary>
public enum CheckDataType
{ /// <summary>
/// 不验证
/// </summary>
None,
/// <summary>
/// 不为空
/// </summary>
Require,
/// <summary>
/// 电子邮件
/// </summary>
Email,
/// <summary>
/// 电话
/// </summary>
Phone,
/// <summary>
/// 手机
/// </summary>
Mobile,
/// <summary>
/// URL
/// </summary>
Url,
/// <summary>
/// 信用卡
/// </summary>
IdCard,
/// <summary>
/// Currency
/// </summary>
Currency,
/// <summary>
/// 数字类型
/// </summary>
Number,
/// <summary>
/// 邮编类型
/// </summary>
Zip,
/// <summary>
/// QQ
/// </summary>
QQ,
/// <summary>
/// 整型
/// </summary>
Integer,
/// <summary>
/// 整形能大于0
/// </summary>
IntergerTo0,
/// <summary>
/// 4位数的整型
/// </summary>
Integer4,
/// <summary>
/// 浮点
/// </summary>
Double,
/// <summary>
/// 浮点
/// </summary>
Float,
/// <summary>
/// 后面带两个小数点的浮点
/// </summary>
Float2,
/// <summary>
/// 英文
/// </summary>
English,
/// <summary>
/// 中文
/// </summary>
Chinese,
/// <summary>
/// 不安全的输入
/// </summary>
UnSafe,
/// <summary>
/// 自定义长度限制 length
/// </summary>
CustomLength,
/// <summary>
/// 限制浮点与范围值 length|decimallen
/// </summary>
CustomFloat,
/// <summary>
/// 验证为日期格式
/// </summary>
DateTime,
CustomFloat1
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
}
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 后定义的类别工厂
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 自定义的类别的抽象类
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
/// <summary>
/// 自定义的类别的抽象类
/// </summary>
public abstract class Custom
{
#region 属性
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private string _controlAttribute="";
/// <summary>
/// 控件的属性
/// </summary>
public string ControlAttribute
{
get
{
return _controlAttribute;
}
set
{
_controlAttribute=value;
}
}
private IList _Param;
/// <summary>
/// 参数值
/// </summary>
public IList Param
{
get
{
return _Param;
}
set
{
_Param=value;
}
}
private IList _OutTagParam;
/// <summary>
/// 标记属性
/// </summary>
public IList OutTageParam
{
get
{
return _OutTagParam;
}
set
{
_OutTagParam=value;
}
}
private Type _CType=Type.ANY;
/// <summary>
/// [all|abrast|any]这个类别可以适用于哪几个类别的操作
/// </summary>
public Type CType
{
get
{
return _CType;
}
set
{
_CType=value;
}
}
private string _script="";
/// <summary>
/// 这个验证可以包含的操作[这是一个可行的项目,可以自定义其中的函数]
/// </summary>
public string Script
{ get
{
return _script;
}
set
{
_script=value;
}
}
// private string _ScriptRegName;
/// <summary>
/// 表示 被 注册到系统中的JAVASCRIT块的名称 , 如果是同一个类别的是不是可以是同一个块的名称呢, 当然可以了,
/// 那就把它设成只读的,嘿嘿!
/// </summary>
public string ScriptRegName
{
get
{
return "script" + _ControlType.ToString();
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private string _Message="";
/// <summary>
/// 提示给用户的信息
/// </summary>
public string Message
{
get
{
return _Message;
}
set
{
_Message=value;
}
}
protected CheckDataType _ControlType;
/// <summary>
/// 操作的类别
/// </summary>
public CheckDataType ControlType
{
get
{
return _ControlType;
}
}
private bool _isRequir=false;
/// <summary>
/// 标识为是否必须验证
/// </summary>
public bool IsRequir
{
get
{
return _isRequir;
}
set
{
_isRequir=value;
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public virtual void AddAttribute(System.Web.UI.WebControls.WebControl control)
{
return;
}
#endregion
public abstract string GetRegex();
}
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 限制长度的抽象类
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
/// <summary>
/// 限制长度的抽象类
/// </summary>
public class CustomLength:Custom
{
public CustomLength()
{
}
public CustomLength(IList l)
{
if(l!=null)
{
this.Param=l;
this.OutTageParam=new ArrayList();
this.OutTageParam.Add("MaxLength");
//---------------------------------
//添加验证长度
this.OutTageParam.Add("dataType");
this.OutTageParam.Add("min");
this.OutTageParam.Add("max");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
this.Param.Add("LimitB");
this.Param.Add("1");
this.Param.Add(l[0].ToString());
//---------------------------------
// this.Message="限制长度" + l[0].ToString() + "位之内,中文是两位字符!";
this.Message="长度不正确!";
}
_ControlType=CheckDataType.CustomLength;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
}
/// <summary>
/// 自定义的添加验证事件
/// </summary>
private void CustomScript()
{
if(this.Param.Count==this.OutTageParam.Count)
{
// string script="";
}
}
public override string GetRegex()
{
string mailto:|@abc<3-2";
if(Param!=null)
{
regexstring=regexstring.Replace("length",this.Param[0].ToString());
return regexstring;
}
return null;
}
}
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 限制浮点与范围值|小数带参数 abc<3-2>,cc<4-5>
public class CustomFloat:Custom
{
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public override void AddAttribute(System.Web.UI.WebControls.WebControl control)
{
// control.Attributes.Add("Style1","IME-MODE:disabled");
control.Attributes.Add("style","IME-MODE:disabled");
// base.AddAttribute (control);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public CustomFloat(){}
public void cLength(IList l)
{
if(l!=null)
{
//---------------------------------
//添加验证长度
this.OutTageParam.Add("dataType");
this.Param.Add(CheckDataType.Float.ToString());
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public CustomFloat(IList l)
{ this.Param=l;
this.OutTageParam=new ArrayList();
//添加两个和参数相对应的属性
this.OutTageParam.Add("length");
this.OutTageParam.Add("decimallen");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
// this.ControlAttribute="style=\"IME-MODE:disabled\"";
// this.OutTageParam.Add("style");
// this.Param.Add("IME-MODE:disabled");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
if(l!=null)
// this.Message="限制浮点与范围值:长度" + l[0].ToString() + "位;小数位" + l[1].ToString() + "位";
this.Message="格式不正确!请输入小数!";
this.cLength(l);
// CType=Type.Restrict; //说明这个类只能用于输入验证
_ControlType=CheckDataType.CustomFloat;
}
public override string GetRegex()
{
// string regexstring="^[-\\+]?(0|[1-9]\\d{0,length})(file://.//d{0,decimallen})?$";
//在验证时不得以为每一个要验证的数据后加入限制符{0,1} | ?
string regexstring="^((0|[1-9])\\d{0,length})?(file://.//d{0,decimallen})?$";
if(this.Param!=null)
{
//新加入的//更改一下,因为在这个系统中传入的length为已经减入过后的值了
//******************************************************
//只针对这个系统 ,用过这个系统后可以改回来
// int tmpleng=int.Parse(this.Param[0].ToString())-int.Parse(this.Param[1].ToString())-1;
int tmpleng=int.Parse(this.Param[0].ToString())-1;
//******************************************************
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
if(tmpleng==-1)
{
regexstring="^(0)(file://.//d{0,decimallen})?$";
regexstring=regexstring.Replace("decimallen",this.Param[1].ToString());
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
}
else
{
if(tmpleng<0)
tmpleng=int.Parse(this.Param[0].ToString());
//regexstring=regexstring.Replace("length",this.Param[0].ToString());
regexstring=regexstring.Replace("length",tmpleng.ToString());
regexstring=regexstring.Replace("decimallen",this.Param[1].ToString());
//更新当精度 和 小数位 相同 时, 只允许输入0.111111*
}
}
return regexstring;
}
}
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 限制浮点与范围值|小数带参数 abc<3-2>,cc<4-5>
public class CustomFloat1:Custom
{
public CustomFloat1(){}
public override void AddAttribute(System.Web.UI.WebControls.WebControl control)
{
control.Attributes.Add("style","IME-MODE:disabled");
}
public void cLength(IList l)
{
if(l!=null)
{
//---------------------------------
//添加验证长度
this.OutTageParam.Add("dataType");
this.Param.Add(CheckDataType.Float.ToString());
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
}
public CustomFloat1(IList l)
{
this.Param=l;
this.OutTageParam=new ArrayList();
//添加两个和参数相对应的属性
this.OutTageParam.Add("length");
this.OutTageParam.Add("decimallen");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
if(l!=null)
// this.Message="限制浮点与范围值:长度" + l[0].ToString() + "位;小数位" + l[1].ToString() + "位";
this.Message="格式不正确!请输入小数!";
this.cLength(l);
// CType=Type.Restrict; //说明这个类只能用于输入验证
_ControlType=CheckDataType.CustomFloat;
}
public override string GetRegex()
{
// string regexstring="^[-\\+]?(0|[1-9]\\d{0,length})(file://.//d{0,decimallen})?$";
//在验证时不得以为每一个要验证的数据后加入限制符{0,1} | ?
string regexstring="^[-\\+]?((0|[1-9])\\d{0,length})?(file://.//d{0,decimallen})?$";
if(this.Param!=null)
{
//新加入的//更改一下,因为在这个系统中传入的length为已经减入过后的值了
//******************************************************
//只针对这个系统 ,用过这个系统后可以改回来
// int tmpleng=int.Parse(this.Param[0].ToString())-int.Parse(this.Param[1].ToString())-1;
int tmpleng=int.Parse(this.Param[0].ToString())-1;
//******************************************************
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
if(tmpleng==-1)
{
regexstring="^(0)(file://.//d{0,decimallen})?$";
regexstring=regexstring.Replace("decimallen",this.Param[1].ToString());
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
}
else
{
if(tmpleng<0)
tmpleng=int.Parse(this.Param[0].ToString());
//regexstring=regexstring.Replace("length",this.Param[0].ToString());
regexstring=regexstring.Replace("length",tmpleng.ToString());
regexstring=regexstring.Replace("decimallen",this.Param[1].ToString());
//更新当精度 和 小数位 相同 时, 只允许输入0.111111*
}
}
return regexstring;
}
}
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 用来适应其它类型
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public class Common:Custom
{
#region 返回相应类别的验证的正则表达式
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
/// <summary>
/// 返回相应类别的验证的正则表达式
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
private string getRestrictRegex(CheckDataType t)
{
string re="";
switch(t)
{
case CheckDataType.Float2:
re="^(0|[1-9]\\d{0,3})?(file://.//d{0,2})?$";
break;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
case CheckDataType.Integer4:
re="^(0|[1-9]\\d{0,3})?$";
break;
case CheckDataType.Require:
re=".+";
break;
case CheckDataType.Email:
re="^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
break;
case CheckDataType.Phone:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//对于限制输入 来说{0,3} 开头必须是0
// re="^((file://(//d{3}//))|(//d{3}//-))?(//(0//d{2,3}//)|0//d{2,3}-)?[1-9]//d{6,7}$";
//修改后的
re="^((file://(//d{3}//))|(//d{3}//-))?(//(0//d{0,3}//)|0//d{0,3}-)?[1-9]//d{0,7}$";
break;
case CheckDataType.Mobile:
re="^((file://(//d{3}//))|(//d{3}//-))?13//d{9}$";
break;
case CheckDataType.Url:
re="^http:\\/\\/[A-Za-z0-9]+\\.[A-Za-z0-9]+[\\/=\\?%\\-&_~`@[\\]\\':+!]*([^<>";
re +="\\\"\\\"])*$";
break;
case CheckDataType.IdCard:
re="^\\d{15}(file://d{2}[A-Za-z0-9])?$/";
break;
case CheckDataType.Currency:
re="^\\d+(file://.//d+)?$";
break;
case CheckDataType.Number:
re="^\\d+$";
break;
case CheckDataType.Zip:
re="^[1-9]\\d{5}$";
break;
case CheckDataType.QQ:
//re="^[1-9]\\d{4,8}$";
re="^[1-9]\\d{0,8}$";
break;
case CheckDataType.Integer:
re="^[-\\+]?\\d{0,10}$";
break;
case CheckDataType.IntergerTo0:
re="^\\d{0,10}$";
break;
case CheckDataType.Double:
re="^[-\\+]?\\d+(file://.//d+)?$";
break;
case CheckDataType.Float:
// re="^[-\\+]?\\d+(file://.//d+)?$";
re="^[-\\+]?(file://d)*(//.//d+)?$";
break;
case CheckDataType.English:
re="^[A-Za-z]+$";
break;
case CheckDataType.Chinese:
re="^[\\u0391-\\uFFE5]+$";
break;
case CheckDataType.UnSafe:
re="^(([A-Z]*|[a-z]*|\\d*|[-_\\~!@#\\$%\\^&\\*\\.\\(file://)//[//]//{//}<>//?/////////'///"]*)|.{0,5})$|//s";
break;
case CheckDataType.DateTime:
// re="^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$";
// re="^((((1[6-9]|[2-9]\\d?)\\d{0,2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{0,2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{0,2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$";
mailto:|@abc<3-2"; //注自己写的,格式如:2005-1-1
break;
}
return re;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#endregion
#region 返回相应的类别的提示信息
private string getDefaultMsg(CheckDataType t)
{
string re="";
// string splitstr="|";
switch(t)
{
case CheckDataType.Float2:
re="需输入两位小数位的浮点值";
break;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
case CheckDataType.Integer4:
re="需输入4位的整数";
break;
case CheckDataType.Require:
re="不能为空";
break;
case CheckDataType.Email:
re="需输入Emalil 如 mailto:|@abc<3-2";
break;
case CheckDataType.Phone:
re="需输入电话格式";
break;
case CheckDataType.Mobile:
re="需输入手机格式";
break;
case CheckDataType.Url:
re="需输入网址 如 http://www.aaa.com/ ";
break;
case CheckDataType.IdCard:
re="需输入卡号格式";
break;
case CheckDataType.Currency:
re="需输入Currency格式";
break;
case CheckDataType.Number:
re="需输入数字";
break;
case CheckDataType.Zip:
re="需输入邮编格式 如: 100000";
break;
case CheckDataType.QQ:
re="需输入QQ";
break;
case CheckDataType.Integer:
re="需输入整数型";
break;
case CheckDataType.Double:
re="需输入双精度浮点型";
break;
case CheckDataType.Float:
re="需输入浮点型";
break;
case CheckDataType.English:
re="需输入英文";
break;
case CheckDataType.Chinese:
re="需输入中文";
break;
case CheckDataType.UnSafe:
re="不安全代码";
break;
case CheckDataType.DateTime:
re="日期格式不正确,正确的格式信息如 1999-1-1";
break;
}
re= re;
return re;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
// public Common(){ }
private string regexstr="";
public Common(CheckDataType t)
{
this.Message=this.getDefaultMsg(t);
regexstr=this.getRestrictRegex(t);
this._ControlType=t;
if(t==CheckDataType.Require)
this.IsRequir=true;
switch(t)
{
case CheckDataType.Float2:
this.CType=Type.ANY;
break;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
case CheckDataType.Integer4:
this.CType=Type.ANY;
break;
case CheckDataType.Number:
this.CType=Type.ANY;
break;
case CheckDataType.Integer:
this.CType=Type.ANY;
break;
case CheckDataType.Double:
this.CType=Type.ANY;
break;
case CheckDataType.Float:
this.CType=Type.ANY;
break;
case CheckDataType.English:
this.CType=Type.ANY;
break;
case CheckDataType.Chinese:
this.CType=Type.ANY;
break;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public override string GetRegex()
{
return this.regexstr;
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 工厂类返回指定的类别
public class CustomFactory
{
public static Custom GetCustom(CheckDataType t,IList p)
{ Custom item;
switch(t)
{
case CheckDataType.CustomLength:
item=new CustomLength(p);
break;
case CheckDataType.CustomFloat:
item=new CustomFloat(p);
break;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
case CheckDataType.CustomFloat1:
item=new CustomFloat1(p);
break;
default:
item=new Common(t);
break;
}
item.Message="|" + item.Message;
return item;
}
}
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
/// <summary>
/// 页面上的控件进行限制
/// </summary>
public class WebFormValidate
{
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 属性
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public enum ALLCheckType
{
/// <summary>
/// 第一种验证方式
/// </summary>
one,
/// <summary>
/// 第二种验证方式
/// </summary>
two,
/// <summary>
/// 第三种验证方式
/// </summary>
Three
}
private string _ValidateJsPath="http://www.cnblogs.com/js/validateJs.js";
/// <summary>
/// 验证类的Js文件的存放位置
/// </summary>
public string ValidateJsPath
{
get
{
return _ValidateJsPath;
}
set
{
_ValidateJsPath=value;
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private ALLCheckType _CheckTypeWhereALL=ALLCheckType.one;
/// <summary>
/// 当使用ALL验证时的验证的方式
/// </summary>
public WebFormValidate.ALLCheckType CheckTypeWhereALL
{
get
{
return _CheckTypeWhereALL;
}
set
{
_CheckTypeWhereALL=value;
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private string _DateCalenderJsPath="http://www.cnblogs.com/js/PopupCalendar.js";
/// <summary>
/// 日期控件Js文件的存放放置
/// </summary>
public string DateCalenderJsPath
{
get
{
return _DateCalenderJsPath;
}
set
{
_DateCalenderJsPath=value;
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
// private string _scriptString=" <script language=\"javascript\" src=\"/js/validateJs.js\"> </script>";
protected string scriptString
{
get
{
return " <script language=\"javascript\" src=\"" + this._ValidateJsPath + "\" charset=\"gb2312\"> </script>";
}
}
//private string _DateTimeCalJsPath="../javascript/time.htm";
private string _DateTimeCalJsPath="http://www.cnblogs.com/js/time.htm";
public string DateTimeCalJsPath
{
get
{
return _DateTimeCalJsPath;
}
set
{ _DateTimeCalJsPath=value;
}
}
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 构造函数
private Type _checkType=Type.All;
public Type CheckType
{
set
{
_checkType=value;
}
get
{
return _checkType;
}
}
public WebFormValidate()
{
scriptRestrict +=" <script>";
scriptRestrict +=" function regInput(obj, reg, inputStr) " + System.Environment.NewLine;
scriptRestrict +=" { var docSel = document.selection.createRange() "+ System.Environment.NewLine;
scriptRestrict +=" oSel = docSel.duplicate() " + System.Environment.NewLine;
scriptRestrict +=" oSel.text = \"\" "+ System.Environment.NewLine;
scriptRestrict +=" var srcRange = obj.createTextRange() "+ System.Environment.NewLine;
scriptRestrict +=" oSel.setEndPoint(\"StartToStart\", srcRange) "+ System.Environment.NewLine;
scriptRestrict +=" var str = oSel.text + inputStr + srcRange.text.substr(oSel.text.length) " + System.Environment.NewLine;
scriptRestrict +=" return reg.test(str) " + System.Environment.NewLine;
scriptRestrict +=" } </script>" + System.Environment.NewLine;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
}
// public WebFormValidate(Type t)
// {
// _checkType=t;
// scriptRestrict +=" <script>";
// scriptRestrict +=" function regInput(obj, reg, inputStr) ";
// scriptRestrict +=" { var docSel = document.selection.createRange() ";
// scriptRestrict +=" oSel = docSel.duplicate() ";
// scriptRestrict +=" oSel.text = \"\" ";
// scriptRestrict +=" var srcRange = obj.createTextRange() ";
// scriptRestrict +=" oSel.setEndPoint(\"StartToStart\", srcRange) ";
// scriptRestrict +=" var str = oSel.text + inputStr + srcRange.text.substr(oSel.text.length) ";
// scriptRestrict +=" return reg.test(str) ";
// scriptRestrict +=" } </script>";
// }
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region other
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public void initAllControl(Control control)
{
}
private string scriptRestrict="";
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
/// <summary>
/// 返回相应类别的验证的正则表达式
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
private string getRestrictRegex(CheckDataType t)
{
string re="";
switch(t)
{
case CheckDataType.Float2:
re="^(0|[1-9]\\d{0,3})(file://.//d{0,2})?$";
break;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
case CheckDataType.Integer4:
re="^(0|[1-9]\\d{0,3})?$";
break;
case CheckDataType.Require:
re=".+";
break;
case CheckDataType.Email:
re="^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
break;
case CheckDataType.Phone:
re="^((file://(//d{3}//))|(//d{3}//-))?(//(0//d{2,3}//)|0//d{2,3}-)?[1-9]//d{6,7}$";
break;
case CheckDataType.Mobile:
re="^((file://(//d{3}//))|(//d{3}//-))?13//d{9}$";
break;
case CheckDataType.Url:
re="^http:\\/\\/[A-Za-z0-9]+\\.[A-Za-z0-9]+[\\/=\\?%\\-&_~`@[\\]\\':+!]*([^<>";
re +="\\\"\\\"])*$";
break;
case CheckDataType.IdCard:
re="^\\d{15}(file://d{2}[A-Za-z0-9])?$/";
break;
case CheckDataType.Currency:
re="^\\d+(file://.//d+)?$";
break;
case CheckDataType.Number:
re="^\\d+$";
break;
case CheckDataType.Zip:
re="^[1-9]\\d{5}$";
break;
case CheckDataType.QQ:
re="^[1-9]\\d{4,8}$";
break;
case CheckDataType.Integer:
//对整形验证加入长度验证10位
//re="^[-\\+]?\\d+$";
re="^[-\\+]?\\d{10}$";
break;
case CheckDataType.Double:
re="^[-\\+]?\\d+(file://.//d+)?$";
break;
case CheckDataType.Float:
re="^[-\\+]?\\d+(file://.//d+)?$";
break;
case CheckDataType.English:
re="^[A-Za-z]+$";
break;
case CheckDataType.Chinese:
re="^[\\u0391-\\uFFE5]+$";
break;
case CheckDataType.UnSafe:
re="^(([A-Z]*|[a-z]*|\\d*|[-_\\~!@#\\$%\\^&\\*\\.\\(file://)//[//]//{//}<>//?/////////'///"]*)|.{0,5})$|//s";
break;
}
return re;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 操作函数
public void addValidate(System.Web.UI.WebControls.WebControl bu,string formName)
{
if((bu is System.Web.UI.WebControls.Button) || (bu is System.Web.UI.WebControls.ImageButton) || (bu is System.Web.UI.WebControls.LinkButton))
{
switch(CheckTypeWhereALL)
{
case ALLCheckType.one:
bu.Attributes.Add("onClick","return Validator.Validate(document.getElementById('" + formName + "'))");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
break;
case ALLCheckType.two:
bu.Attributes.Add("onClick","return Validator.Validate(document.getElementById('" + formName + "'),2)");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
break;
case ALLCheckType.Three:
bu.Attributes.Add("onClick","return alidator.Validate(document.getElementById('" + formName + "'),3)");
break;
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
}
/// <summary>
/// 当用户没有传入MESSAGE值的时候给MESSAGE附初始值
/// </summary>
/// <param name="mess"></param>
/// <returns></returns>
private string getDefaultMsg(CheckDataType t)
{
string re="";
switch(t)
{
case CheckDataType.Float2:
re="需输入两位小数位的浮点值";
break;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
case CheckDataType.Integer4:
re="需输入4位的整数";
break;
case CheckDataType.Require:
re="不能为空";
break;
case CheckDataType.Email:
re="需输入Emalil 如 mailto:|@abc<3-2";
break;
case CheckDataType.Phone:
re="需输入电话格式";
break;
case CheckDataType.Mobile:
re="需输入手机格式";
break;
case CheckDataType.Url:
re="需输入网址 如 http://www.aaa.com/ ";
break;
case CheckDataType.IdCard:
re="需输入卡号格式";
break;
case CheckDataType.Currency:
re="需输入Currency格式";
break;
case CheckDataType.Number:
re="需输入数字";
break;
case CheckDataType.Zip:
re="需输入邮编格式 如: 100000";
break;
case CheckDataType.QQ:
re="需输入QQ";
break;
case CheckDataType.Integer:
re="需输入整数型";
break;
case CheckDataType.Double:
re="需输入双精度浮点型";
break;
case CheckDataType.Float:
re="需输入浮点型";
break;
case CheckDataType.English:
re="需输入英文";
break;
case CheckDataType.Chinese:
re="需输入中文";
break;
case CheckDataType.UnSafe:
re="不安全代码";
break;
case CheckDataType.DateTime:
re="日期的格式不正确";
break;
}
return re;
}
/// <summary>
/// 全部参数验证
/// </summary>
/// <param name="page"></param>
/// <param name="control"></param>
/// <param name="lx"></param>
/// <param name="type"></param>
/// <param name="msg"></param>
public void addControlToValidate(Page page,System.Web.UI.WebControls.WebControl control,Type lx,CheckDataType type,string msg)
{
if(lx==Type.All || lx==Type.ANY)
{
//string scriptString=" <script language=\"javascript\" src=\"/js/validateJs.js\"> </script>";
if(!page.IsClientScriptBlockRegistered("clientScript"))
page.RegisterClientScriptBlock("clientScript", scriptString);
control.Attributes.Add("dataType",type.ToString());
//---------重新给mes值
if(msg=="")
{
msg= this.getDefaultMsg(type);
}
control.Attributes.Add("msg",msg);
// isHaveTypeAll=true;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
}
else
{
if(!page.IsClientScriptBlockRegistered("clientScript1") && scriptRestrict!="")
page.RegisterClientScriptBlock("clientScript1", scriptRestrict);
string tmp=this.getRestrictRegex(type);
if(tmp!="")
{
string checktmp= @"return regInput(this,/" + this.getRestrictRegex(type) + "/,String.fromCharCode(event.keyCode))";
string parsetmp= @"return regInput(this,/" + this.getRestrictRegex(type) + "/,window.clipboardData.getData('Text'))";
control.Attributes.Add("onkeypress",checktmp); //按键事件加入判断
control.Attributes.Add("onpaste",parsetmp); //粘贴事件
// control.Attributes.Add("ime-mode","Disabled");//关闭中文输入法
control.Attributes.Add("ondrag","return false;"); //关闭拖拽
}
// isHaveTypeRestrict=true;
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
/// <summary>
/// 带有参数的全部操作
/// </summary>
/// <param name="page"></param>
/// <param name="control"></param>
/// <param name="lx"></param>
/// <param name="type"></param>
/// <param name="msg"></param>
/// <param name="param"></param>
public void addControlToValidate(Page page,System.Web.UI.WebControls.WebControl control,Type lx,CheckDataType type,string msg,IList param,bool isRequir)
{
Custom item=PDWY.Tools.CustomFactory.GetCustom(type,param);
if(isRequir)
item.IsRequir=true;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//---------重新给mes值
if(msg!="")
{
item.Message=msg + item.Message;
}
item.AddAttribute(control);
//如果这个验证可以适应所调用的验证的话就调用
switch(lx)
{ case Type.ANY:
addControlToValidate(page,control,item);
addControlToValidate(page,control,item,"");
break;
case Type.All:
addControlToValidate(page,control,item);
break;
case Type.Restrict:
addControlToValidate(page,control,item,"");
break;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//新加入的内容
public void RegScript(Page page,System.Web.UI.WebControls.WebControl control,Custom item)
{ //注册验证的自定义的验证函数
//------------------------------
if(item.Script!="")
{
if(!page.IsClientScriptBlockRegistered(item.ScriptRegName))
page.RegisterClientScriptBlock(item.ScriptRegName,item.Script);
}
//将自定义的属性事件加入的客户端
if(item.OutTageParam!=null)
{
if(item.OutTageParam.Count>0)
{
int i=0;
foreach(string tmpitem in item.OutTageParam)
{
if(item.Param[i]!=null)
{
//如果已经有自定义添加的属性则删除这个属性后再添加
if(control.Attributes[tmpitem]!=null)
{
control.Attributes.Remove(tmpitem);
}
control.Attributes.Add(tmpitem,item.Param[i].ToString());
}
i++;
}
}
}
//--------------------------------------
}
/// <summary>
/// [ALL类型验证][新加入了带参数的类别]将验证加入到验证列表里,最后还要调用全部验证
/// </summary>
/// <param name="page"></param>
/// <param name="control"></param>
/// <param name="type"></param>
/// <param name="msg"></param>
public void addControlToValidate(Page page,System.Web.UI.WebControls.WebControl control,Custom item)
{
if(item.CType==Type.ANY || item.CType==Type.All)
{
if(!page.IsClientScriptBlockRegistered("clientScript"))
page.RegisterClientScriptBlock("clientScript", scriptString);
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//在默认情况下使所有的验证都为不必填的 require="false" CheckDataType.Require是个例外
if(!item.IsRequir)
control.Attributes.Add("require","false");
else
{
if(control.Attributes["require"]!=null)
{
if(control.Attributes["require"]!="true")
{
control.Attributes["require"]="true";
}
}
}
//-----------------------------------------
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
control.Attributes.Add("dataType",item.ControlType.ToString());
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//注册验证的自定义的验证函数
//------------------------------
this.RegScript(page,control,item);
//--------------------------------------
//System.Text.Encoding.ASCII.
control.Attributes.Add("msg",item.Message);
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
/// <summary>
/// [限制类别验证][新加入了带参数的类别]直接限制输入
/// </summary>
/// <param name="page"></param>
/// <param name="control"></param>
/// <param name="item"></param>
public void addControlToValidate(Page page,System.Web.UI.WebControls.WebControl control,Custom item,string l)
{
if(item.CType==Type.ANY || item.CType==Type.Restrict)
{
if(!page.IsClientScriptBlockRegistered("clientScript1") && scriptRestrict!="")
page.RegisterClientScriptBlock("clientScript1", scriptRestrict);
string tmp=item.GetRegex();
if(tmp!="")
{
string checktmp= @"return regInput(this,/" + item.GetRegex() + "/,String.fromCharCode(event.keyCode))";
string parsetmp= @"return regInput(this,/" + item.GetRegex() + "/,window.clipboardData.getData('Text'))";
control.Attributes.Add("onkeypress",checktmp); //按键事件加入判断
control.Attributes.Add("onpaste",parsetmp); //粘贴事件
//control.Attributes.Add("ime-mode","Disabled");//关闭中文输入法
control.Attributes.Add("ondrag","return false;"); //关闭拖拽
}
//注册验证的自定义的验证函数
//------------------------------
this.RegScript(page,control,item);
//--------------------------------------
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
/// <summary>
/// [ALL类型验证]将验证加入到验证列表里,最后还要调用全部验证
/// </summary>
/// <param name="page"></param>
/// <param name="control"></param>
/// <param name="type"></param>
/// <param name="msg"></param>
public void addControlToValidate(Page page,System.Web.UI.WebControls.WebControl control,CheckDataType type,string msg)
{
if(!page.IsClientScriptBlockRegistered("clientScript"))
page.RegisterClientScriptBlock("clientScript", scriptString);
control.Attributes.Add("dataType",type.ToString());
//System.Text.Encoding.ASCII.
control.Attributes.Add("msg",msg);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
/// <summary>
/// [限制类别验证]直接限制输入
/// </summary>
/// <param name="page"></param>
/// <param name="control"></param>
/// <param name="type"></param>
public void addControlToValidate(Page page,System.Web.UI.WebControls.WebControl control,CheckDataType type)
{
if(!page.IsClientScriptBlockRegistered("clientScript1") && scriptRestrict!="")
page.RegisterClientScriptBlock("clientScript1", scriptRestrict);
string tmp=this.getRestrictRegex(type);
if(tmp!="")
{ string checktmp= @"return regInput(this,/" + this.getRestrictRegex(type) + "/,String.fromCharCode(event.keyCode))";
string parsetmp= @"return regInput(this,/" + this.getRestrictRegex(type) + "/,window.clipboardData.getData('Text'))";
control.Attributes.Add("onkeypress",checktmp); //按键事件加入判断
control.Attributes.Add("onpaste",parsetmp); //粘贴事件
//control.Attributes.Add("ime-mode","Disabled");//关闭中文输入法
control.Attributes.Add("ondrag","return false;"); //关闭拖拽
}
}
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 简化操作的函数
//这是命令的格式: 不为空|as[all](信息),bc,c,d,e \ 整型|ab,cc,dd \ 小数后留两位|dd,ee,ff
// private string _controlstring="";
// public string ControlString{ get{return _controlstring; } set{ _controlstring=value; } }
/// <summary>
/// 简化操作的函数 [这是命令的格式: 不为空|as[all](信息),bc,c,d,e \ 整型|ab,cc,dd \ 小数后留两位|dd,ee,ff]
/// </summary>
/// <param name="page"></param>
/// <param name="bu"></param>
/// <param name="cstring"></param>
/// <param name="formName"></param>
public void addValidate(Page page,System.Web.UI.WebControls.WebControl bu,string cstring,string formName)
{
char first='\\';
char second='|';
char three=',';
bool isall=false;
//先分开不同的验证类别
string[] typestring=cstring.Split(first);
foreach(string firstTmp in typestring)
{
//再分开验证的类别与控件
string[] typeAndcontrol=firstTmp.Split(second);
//排除不是这个验证字符串的内容
if(typeAndcontrol.Length==2)
{
string commandTmp=typeAndcontrol[0];
string controlTmp=typeAndcontrol[1];
string[] controls=controlTmp.Split(three);
//这时controls是取到的控件名称
foreach(string controlName1 in controls)
{
string controlName=controlName1;
//默认类别
string type="[any]";
string typeany="[any]";
string typeall="[all]";
string typeRestrict="[restrict]";
if(controlName.IndexOf(typeall)>=0)
{
controlName=controlName.Replace(typeall,string.Empty);
type=typeall;
}
if(controlName.IndexOf(typeRestrict)>=0)
{
controlName=controlName.Replace(typeRestrict,string.Empty);
type=typeRestrict;
//if(isall)isall=false;
}
if(controlName.IndexOf(typeany)>=0)
{
controlName=controlName.Replace(typeany,string.Empty);
type=typeany;
}
if(type==typeall || type==typeany)
{
isall=true;
}
string msg="";
//现在查信息
controlName=controlName.Trim();
msg=getMessage(ref controlName,"(",")");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//现在查参数 param
string param=getMessage(ref controlName,"<",">");
// 参数如 4-5-6-7-8-9
IList ParamList=new ArrayList();
string[] tmpparam=param.Split('-');
foreach(string tmpparamitem in tmpparam)
{
if(tmpparamitem!="")
ParamList.Add(tmpparamitem);
}
// ParamList 为空则表示没有参数
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
bool isRequir=false;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//新加入@命令表示为必须验证
if(controlName.IndexOf("@",0)==0)
{
//表示必须验证
isRequir=true;
controlName=controlName.Remove(0,1);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//现在有三个数 type 表示用哪一种验证方式|controlName 表示要被操作的操作|commandTmp 表示要具体是哪一种操作
if(commandTmp==""|| type=="" || controlName=="")
{continue;}
else
{
Control c=page.FindControl(controlName);
if(c is System.Web.UI.WebControls.WebControl)
{
Type mtype;
type=type.Trim();
if(type==typeRestrict) mtype=Type.Restrict;
else
{
if(type==typeany) mtype=Type.ANY; else mtype=Type.All;
}
commandTmp=commandTmp.Trim();
if(ParamList.Count!=0)
this.addControlToValidate(page,(System.Web.UI.WebControls.WebControl)c,mtype,getDataType(commandTmp),msg,ParamList,isRequir);
else
this.addControlToValidate(page,(System.Web.UI.WebControls.WebControl)c,mtype,getDataType(commandTmp),msg,null,isRequir);
}
}
}
}
}
if(isall)this.addValidate(bu,formName);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
/// <summary>
/// 当命令行以以下格式 传入时 不为空|as[all](信息) ,可以 选择出 “信息” 来
/// </summary>
/// <param name="s"></param>
/// <param name="up"></param>
/// <param name="down"></param>
/// <returns></returns>
private string getMessage(ref string s,string up,string down)
{string re=s;
if(s.IndexOf(up)>0 && s.IndexOf(down)>0)
{
re=s.Substring(s.IndexOf(up),s.Length-s.IndexOf(up));
re=re.Replace(up,string.Empty);
re=re.Replace(down,string.Empty);
s=s.Replace(up + re + down,string.Empty);
}
else
{
re="";
}
return re;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private CheckDataType getDataType(string type)
{
switch(type)
{
case "不为空":
return CheckDataType.Require;
case "整型":
return CheckDataType.Integer;
case "正整型":
return CheckDataType.IntergerTo0;
case "小数后留两位":
return CheckDataType.Float2;
case "小数带参数":
return CheckDataType.CustomFloat;
case "小数带参数可为负":
return CheckDataType.CustomFloat1;
case "限制长度":
return CheckDataType.CustomLength;
case "电子邮件":
return CheckDataType.Email;
case "电话":
return CheckDataType.Phone;
case "手机":
return CheckDataType.Mobile;
case "URL":
return CheckDataType.Url;
case "信用卡":
return CheckDataType.IdCard;
case "数字类型":
return CheckDataType.Number;
case "邮编类型":
return CheckDataType.Zip;
case "QQ":
return CheckDataType.QQ;
case "4位数的整型":
return CheckDataType.Integer4;
case "双精度浮点":
return CheckDataType.Double;
case "浮点":
return CheckDataType.Float;
case "英文":
return CheckDataType.English;
case "中文":
return CheckDataType.Chinese;
case "不安全的输入":
return CheckDataType.UnSafe;
case "日期":
return CheckDataType.DateTime;
}
return CheckDataType.None;
}
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 服务器端验证
#region 进行验证的函数
/// <summary>
/// 服务器端应当都为必须验证的
/// </summary>
/// <param name="control"></param>
/// <param name="item"></param>
/// <returns></returns>
public bool IsValidateOnServer(System.Web.UI.WebControls.WebControl control,Custom item)
{
bool re=true;
if(control is System.Web.UI.WebControls.TextBox)
{
System.Web.UI.WebControls.TextBox textbox=(System.Web.UI.WebControls.TextBox)control;
string tmpresult=textbox.Text;
string regex=item.GetRegex();
re=regexCheck(regex,tmpresult);
}
return re;
}
private bool regexCheck(string regex,string result)
{
//bool re=false;
return Regex.IsMatch(result,regex);
//return re;
}
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 简化操作的函数
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//这是命令的格式: 不为空|as[all](信息),bc,c,d,e \ 整型|ab,cc,dd \ 小数后留两位|dd,ee,ff
// private string _controlstring="";
// public string ControlString{ get{return _controlstring; } set{ _controlstring=value; } }
/// <summary>
/// 简化操作的函数 [这是命令的格式: 不为空|as[all](信息),bc,c,d,e \ 整型|ab,cc,dd \ 小数后留两位|dd,ee,ff]
/// </summary>
/// <param name="cstring"></param>
public bool addValidateOnServer(Page page, string cstring)
{
bool re=true;
//当前需要有的操作是 分析命令字、生成Item 、与直接验证
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
char first='\\';
char second='|';
char three=',';
bool isall=false;
//先分开不同的验证类别
string[] typestring=cstring.Split(first);
foreach(string firstTmp in typestring)
{
//再分开验证的类别与控件
string[] typeAndcontrol=firstTmp.Split(second);
//排除不是这个验证字符串的内容
if(typeAndcontrol.Length==2)
{
string commandTmp=typeAndcontrol[0];
string controlTmp=typeAndcontrol[1];
string[] controls=controlTmp.Split(three);
//这时controls是取到的控件名称
foreach(string controlName1 in controls)
{
string controlName=controlName1;
//默认类别
string type="[any]";
string typeany="[any]";
string typeall="[all]";
string typeRestrict="[restrict]";
if(controlName.IndexOf(typeall)>=0)
{
controlName=controlName.Replace(typeall,string.Empty);
type=typeall;
}
if(controlName.IndexOf(typeRestrict)>=0)
{
controlName=controlName.Replace(typeRestrict,string.Empty);
type=typeRestrict;
//if(isall)isall=false;
}
if(controlName.IndexOf(typeany)>=0)
{
controlName=controlName.Replace(typeany,string.Empty);
type=typeany;
}
if(type==typeall || type==typeany)
{
isall=true;
}
string msg="";
//现在查信息
controlName=controlName.Trim();
msg=getMessage(ref controlName,"(",")");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//现在查参数 param
string param=getMessage(ref controlName,"<",">");
// 参数如 4-5-6-7-8-9
IList ParamList=new ArrayList();
string[] tmpparam=param.Split('-');
foreach(string tmpparamitem in tmpparam)
{
if(tmpparamitem!="")
ParamList.Add(tmpparamitem);
}
// ParamList 为空则表示没有参数
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
bool isRequir=false;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//新加入@命令表示为必须验证
if(controlName.IndexOf("@",0)==0)
{
//表示必须验证
isRequir=true;
controlName=controlName.Remove(0,1);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//现在有三个数 type 表示用哪一种验证方式|controlName 表示要被操作的操作|commandTmp 表示要具体是哪一种操作
if(commandTmp==""|| type=="" || controlName=="")
{continue;}
else
{
Control c=page.FindControl(controlName);
if(c is System.Web.UI.WebControls.WebControl)
{
Type mtype;
type=type.Trim();
if(type==typeRestrict) mtype=Type.Restrict;
else
{
if(type==typeany) mtype=Type.ANY; else mtype=Type.All;
}
commandTmp=commandTmp.Trim();
if(isRequir)
{
Custom item=CustomFactory.GetCustom(getDataType(commandTmp),ParamList);
if(msg!="")
{
item.Message=msg;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//如果服务器没有验证成功
if(!this.IsValidateOnServer((System.Web.UI.WebControls.WebControl)c,item))
{
//输出相应的错误信息了,然后返回一个有错误的提示
re=false;
break;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
}
}
}
}
}
}
return re;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#region 日期控件
protected string dateCalstring
{
get
{
return "<script language=\"javascript\" src=\"" + _DateCalenderJsPath + "\" charset=\"gb2312\"></script>";
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public void addDateCal(Page page,System.Web.UI.WebControls.WebControl control)
{
// string datejs="<script>" + System.Environment.NewLine;
// datejs +="var oCalendarChs=new PopupCalendar(\"oCalendarChs\"); //初始化控件时,请给出实例名称:oCalendarChs " + System.Environment.NewLine;
// datejs +=" oCalendarChs.weekDaySting=new Array(\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"); ";
// datejs +=" oCalendarChs.monthSting=new Array(\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\");" + System.Environment.NewLine;
// datejs +=" oCalendarChs.oBtnTodayTitle=\"今天\";" + System.Environment.NewLine;
// datejs +=" oCalendarChs.oBtnClearTitle=\"清空\";" + System.Environment.NewLine;
// datejs +=" oCalendarChs.oBtnCancelTitle=\"取消\";" + System.Environment.NewLine;
// datejs +=" oCalendarChs.Init(); " + System.Environment.NewLine;
// datejs +=" </script>" + System.Environment.NewLine;
// if(!page.IsClientScriptBlockRegistered("clientScript2") && dateCalstring!="")
// page.RegisterClientScriptBlock("clientScript2", dateCalstring);
//
// if(!page.IsClientScriptBlockRegistered("clientScript3") && datejs!="")
// page.RegisterClientScriptBlock("clientScript3", datejs);
//
// control.Attributes.Add("onclick","getDateString(this,oCalendarChs)");
string datejs="<script language=\"javascript\" src=\"http://www.cnblogs.com/js/setday.js\" charset=\"gb2312\"></script>";
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
// if(!page.IsClientScriptBlockRegistered("clientScript2") && dateCalstring!="")
// page.RegisterClientScriptBlock("clientScript2", dateCalstring);
if(!page.IsClientScriptBlockRegistered("clientScript3") && datejs!="")
page.RegisterClientScriptBlock("clientScript3", datejs);
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
control.Attributes.Add("onclick","setday(this);return false;");
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
/// <summary>
/// 加入日期控件 可以给日期控件加入只读属性
/// </summary>
/// <param name="page"></param>
/// <param name="control"></param>
/// <param name="strReadOnly">是否只读的属性</param>
public void addDateCal(Page page,System.Web.UI.WebControls.WebControl control,bool strReadOnly)
{
this.addDateCal(page,control);
if(strReadOnly)
control.Attributes.Add("readonly","readonly");
}
/// <summary>
/// 加入日期控件带有时间的选择
/// </summary>
/// <param name="page"></param>
/// <param name="control"></param>
public void addDateTimeCal(Page page,System.Web.UI.WebControls.WebControl control)
{
string temp="";
temp +="<SCRIPT>" + System.Environment.NewLine;
temp +=" function SelDateTime(obj)" + System.Environment.NewLine;
temp +=" {" + System.Environment.NewLine;
temp +=" var para=\"scroll:no;status:no;center:yes;unadorned:no;dialogHeight:215px;dialogWidth:450px;\"" + System.Environment.NewLine;
//temp +=" window.showModalDialog(\"time.htm?\"+Math.random(),obj, para)" + System.Environment.NewLine;
temp +=" window.showModalDialog(\"" + _DateTimeCalJsPath + "?\"+Math.random(),obj, para)" + System.Environment.NewLine;
temp +=" }" + System.Environment.NewLine;
temp +=" " + System.Environment.NewLine;
temp +=" function regInput(obj, reg, inputStr)" + System.Environment.NewLine;
temp +=" {" + System.Environment.NewLine;
temp +=" var docSel = document.selection.createRange()" + System.Environment.NewLine;
temp +=" oSel = docSel.duplicate()" + System.Environment.NewLine;
temp +=" oSel.text = \"\"" + System.Environment.NewLine;
temp +=" var srcRange = obj.createTextRange()" + System.Environment.NewLine;
temp +=" oSel.setEndPoint(\"StartToStart\", srcRange)" + System.Environment.NewLine;
temp +=" var str = oSel.text + inputStr + srcRange.text.substr(oSel.text.length)" + System.Environment.NewLine;
temp +=" return reg.test(str)" + System.Environment.NewLine;
temp +=" }" + System.Environment.NewLine;
temp +=" " + System.Environment.NewLine;
temp +=" </SCRIPT>" + System.Environment.NewLine;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
if(!page.IsClientScriptBlockRegistered("pdwydateTimeCal"))
page.RegisterClientScriptBlock("pdwydateTimeCal",temp);
control.Attributes.Add("onclick","SelDateTime(this);");
}
/// <summary>
/// 加入日期控件带有时间的选择 并可以选择时间
/// </summary>
/// <param name="page"></param>
/// <param name="control"></param>
/// <param name="strReadOnly">true 为只读, false 为需要只读</param>
public void addDateTimeCal(Page page,System.Web.UI.WebControls.WebControl control,bool strReadOnly)
{
this.addDateTimeCal(page,control);
if(strReadOnly)
control.Attributes.Add("readonly","readonly");
}
#endregion
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
}
posted on
2009-11-18 12:45
冰云
阅读(
745)
评论()
编辑
收藏
举报