• 一段输入框控制代码,包含所有控制条件!


    //LastTime 1.3 Edition -----------------------------

    #region 版本说明 edition explain

    /*
     
    * 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

    #region 版权说明 copyright explain

    /*
     
    * Create By Liangzhimy
     
    * 任何单位或个人都可以更改并更新本版本,但更新后的版本请发送到mailto:|@abc<3-2中确认。 
     
    * 任何单位或个人都可以分发此验证版本,但请保留版权信息 
    */
    #endregion

    #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
     * 
     *
     * 
     */

    #endregion

    using System;
    using System.Web; 
    using System.Web.UI; 
    using System.Collections; 
    using System.Text.RegularExpressions; 

    namespace PDWY.Tools
    {
     #region 枚举类别
     /// <summary>
     /// 两种验证的方法, ALL提交时验证 Restrict输入时验证
     /// </summary>

     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

     }
     #endregion

     #region 后定义的类别工厂 

     #region 自定义的类别的抽象类

     /// <summary>
     /// 自定义的类别的抽象类
     /// </summary>
     public abstract  class Custom
     {
      #region 属性

      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(); 
       } 
      } 

      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; 
       } 
      } 

      public  virtual void AddAttribute(System.Web.UI.WebControls.WebControl control)
      { 
       return; 
      } 
      #endregion 
      public abstract string GetRegex();  
     } 
      #endregion 

     #region 限制长度的抽象类

     /// <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"); 

       this.Param.Add("LimitB"); 
       this.Param.Add("1"); 
       this.Param.Add(l[0].ToString()); 
       //---------------------------------
      
      // this.Message="限制长度" + l[0].ToString() + "位之内,中文是两位字符!";  
         this.Message="长度不正确!"; 
             } 
       
       _ControlType=CheckDataType.CustomLength; 

      }
      /// <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 

     #region 限制浮点与范围值|小数带参数 abc<3-2>,cc<4-5>
     public class CustomFloat:Custom
     { 

      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);
      }

      public CustomFloat(){}
      
      public void cLength(IList l)
      {
       if(l!=null)
       { 
       //---------------------------------
        //添加验证长度
        this.OutTageParam.Add("dataType");
        this.Param.Add(CheckDataType.Float.ToString()); 
      
       }  

      }
      

      public CustomFloat(IList l)
      {    this.Param=l; 
       this.OutTageParam=new ArrayList(); 
       //添加两个和参数相对应的属性
       this.OutTageParam.Add("length"); 
       this.OutTageParam.Add("decimallen"); 

      // this.ControlAttribute="style=\"IME-MODE:disabled\""; 
     //  this.OutTageParam.Add("style"); 
     //  this.Param.Add("IME-MODE:disabled"); 


      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; 
                    //******************************************************

        if(tmpleng==-1)
        { 
         regexstring="^(0)(file://.//d{0,decimallen})?$"; 
         regexstring=regexstring.Replace("decimallen",this.Param[1].ToString()); 

        }
        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 

     

     #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()); 
      
       }  

      }
      public CustomFloat1(IList l)
      {
        this.Param=l; 
       this.OutTageParam=new ArrayList(); 
       //添加两个和参数相对应的属性
       this.OutTageParam.Add("length"); 
       this.OutTageParam.Add("decimallen"); 

       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; 
        //******************************************************

        if(tmpleng==-1)
        { 
         regexstring="^(0)(file://.//d{0,decimallen})?$"; 
         regexstring=regexstring.Replace("decimallen",this.Param[1].ToString()); 

        }
        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 

     

     #region 用来适应其它类型

     public class Common:Custom
     { 
      #region 返回相应类别的验证的正则表达式

      /// <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; 

        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:

         //对于限制输入 来说{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; 
      } 

        #endregion 
     
      #region 返回相应的类别的提示信息 
      private string getDefaultMsg(CheckDataType t)
      { 
       
       string re=
    ""
    //   string splitstr=
    "|"
       switch(t)
       { 
        case CheckDataType.Float2:
         re=
    "需输入两位小数位的浮点值"
         break; 

        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;   
      } 

      #endregion 

     // 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; 

        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; 
       } 

      } 

      public override string GetRegex()
      {
       return this.regexstr;
      }
     } 

     #endregion 

     #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; 

        case CheckDataType.CustomFloat1:
         item=new CustomFloat1(p); 
         break; 
        default: 
         item=new Common(t); 
         break;   
       } 
       item.Message=
    "|" + item.Message; 
       return item; 
      }
     } 
     #endregion 

     #endregion 

     /// <summary>
     /// 页面上的控件进行限制
     /// </summary>
     public class WebFormValidate
     {

      #region 属性

      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; 
       } 
      } 

      private ALLCheckType _CheckTypeWhereALL=ALLCheckType.one; 
      /// <summary>
      /// 当使用ALL验证时的验证的方式 
      /// </summary>
      public WebFormValidate.ALLCheckType CheckTypeWhereALL
      { 
       get
       { 
        return _CheckTypeWhereALL; 
       } 
       set
       { 
       _CheckTypeWhereALL=value; 
       } 
      } 

      private string _DateCalenderJsPath=
    "http://www.cnblogs.com/js/PopupCalendar.js"
      /// <summary>
      /// 日期控件Js文件的存放放置
      /// </summary>
      public string DateCalenderJsPath
      {
       get
       { 
        return _DateCalenderJsPath; 
       } 
       set
       { 
       _DateCalenderJsPath=value; 
       } 
      }

    //  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

      #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;  

      }
    //  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 

      #region other 

      public void initAllControl(Control control)
      { 
      } 
      private  string scriptRestrict=
    ""

      /// <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; 

        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; 
      } 


      
      
    #endregion 

      #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 + "'))"); 

           break; 
          case ALLCheckType
    .two:
           bu
    .Attributes.Add("onClick","return Validator.Validate(document.getElementById('" + formName + "'),2)"); 

           break; 
          case ALLCheckType
    .Three:
           bu
    .Attributes.Add("onClick","return alidator.Validate(document.getElementById('" + formName + "'),3)"); 
           break; 
         }     
       }

      } 
      
    /// <summary>
      
    /// 当用户没有传入MESSAGE值的时候给MESSAGE附初始值
      
    /// </summary>
      
    /// <param name="mess"></param>
      
    /// <returns></returns>
      private string getDefaultMsg(CheckDataType t)
      { 
       
        string re
    =""
        switch(t)
        { 
         case CheckDataType
    .Float2:
          re
    ="需输入两位小数位的浮点值"
          break; 

         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; 

       }
       
    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; 
       }                   
      }

     
    /// <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; 

       
    //---------重新给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; 
        }     
      

      } 

      
    //新加入的内容 
      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);

        
    //在默认情况下使所有的验证都为不必填的 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"
          } 
         } 
        } 
        
    //-----------------------------------------

       control
    .Attributes.Add("dataType",item.ControlType.ToString()); 

        
    //注册验证的自定义的验证函数 
        
    //------------------------------
        this
    .RegScript(page,control,item); 
        
    //--------------------------------------
     
        
       
    //System.Text.Encoding.ASCII.
       control
    .Attributes.Add("msg",item.Message);     
       } 
      } 

      
    /// <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); 
        
    //--------------------------------------
       }
      } 


      
    /// <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); 
      } 


      
    /// <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   

      #region 简化操作的函数 

      //这是命令的格式: 不为空|as[all](信息),bc,c,d,\ 整型|ab,cc,dd \ 小数后留两位|dd,ee,ff
     
    // private string _controlstring=""
    //     public string ControlString{ get{return _controlstring; } set{ _controlstring=value; } } 
      
    /// <summary>
      
    ///  简化操作的函数 [这是命令的格式: 不为空|as[all](信息),bc,c,d,\ 整型|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,"(",")"); 

          
    //现在查参数 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 为空则表示没有参数 

          bool isRequir
    =false; 

          
    //新加入@命令表示为必须验证 
          
    if(controlName.IndexOf("@",0)==0)
          {
           
    //表示必须验证
           isRequir
    =true; 
           controlName
    =controlName.Remove(0,1); 
          } 

        
    //现在有三个数 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); 
      } 

      
    /// <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; 
      } 

      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 

      #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

      #region 简化操作的函数


      
    //这是命令的格式: 不为空|as[all](信息),bc,c,d,\ 整型|ab,cc,dd \ 小数后留两位|dd,ee,ff
      
    // private string _controlstring=""
      
    //     public string ControlString{ get{return _controlstring; } set{ _controlstring=value; } } 
      
    /// <summary>
      
    ///  简化操作的函数 [这是命令的格式: 不为空|as[all](信息),bc,c,d,\ 整型|ab,cc,dd \ 小数后留两位|dd,ee,ff]
      
    /// </summary>
      
    /// <param name="cstring"></param>
      public  bool addValidateOnServer(Page page
    , string cstring)
      {
       bool re
    =true; 
       
    //当前需要有的操作是 分析命令字、生成Item 、与直接验证

       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,"(",")"); 

          
    //现在查参数 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 为空则表示没有参数 

          bool isRequir
    =false; 

          
    //新加入@命令表示为必须验证 
          
    if(controlName.IndexOf("@",0)==0)
          {
           
    //表示必须验证
           isRequir
    =true; 
           controlName
    =controlName.Remove(0,1); 
          } 

          
    //现在有三个数 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; 
            } 

            
    //如果服务器没有验证成功
            
    if(!this.IsValidateOnServer((System.Web.UI.WebControls.WebControl)c,item))
            { 
             
    //输出相应的错误信息了,然后返回一个有错误的提示
                                                                     
             re
    =false; 
             break; 
                                     }   

            } 
                                
           } 
          
          } 
           
         }                     
        }
       } 
         
    return re; 
      } 

      
    #endregion

      #endregion

      #region 日期控件 

      protected string dateCalstring
      { 
       get
       { 
        
    return "<script language=\"javascript\" src=\"" + _DateCalenderJsPath + "\" charset=\"gb2312\"></script>";
       } 
      } 
       

      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>"

       
    //  if(!page.IsClientScriptBlockRegistered("clientScript2"&& dateCalstring!="")
       
    //  page.RegisterClientScriptBlock("clientScript2", dateCalstring); 
      
       
    if(!page.IsClientScriptBlockRegistered("clientScript3"&& datejs!="")
        page
    .RegisterClientScriptBlock("clientScript3", datejs); 

       control
    .Attributes.Add("onclick","setday(this);return false;"); 
      }

     
    /// <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; 

       
    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 
     
     }

    }
  • 相关阅读:
    新式类、经典类与多继承
    实现抽象类之方式二
    实现抽象类之方式一
    re模块
    28个高频Linux命令
    Git使用教程
    编程语言介绍
    编码
    进制
    操作系统简史
  • 原文地址:https://www.cnblogs.com/bingyun84/p/1605277.html
Copyright © 2020-2023  润新知