惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
C
Check Point Blog
Stack Overflow Blog
Stack Overflow Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
M
MIT News - Artificial intelligence
L
LangChain Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - Franky
WordPress大学
WordPress大学
博客园_首页
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Visual Studio Blog
L
LINUX DO - 最新话题
S
Security @ Cisco Blogs
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Help Net Security
Help Net Security
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
The GitHub Blog
The GitHub Blog
Schneier on Security
Schneier on Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
Jina AI
Jina AI
雷峰网
雷峰网
罗磊的独立博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 【当耐特】
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
人人都是产品经理
人人都是产品经理
Microsoft Security Blog
Microsoft Security Blog
V
V2EX
N
News and Events Feed by Topic
V2EX - 技术
V2EX - 技术
宝玉的分享
宝玉的分享
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hacker News - Newest:
Hacker News - Newest: "LLM"
P
Proofpoint News Feed
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
O
OpenAI News
P
Proofpoint News Feed
H
Help Net Security
S
Securelist
Vercel News
Vercel News
Hacker News: Ask HN
Hacker News: Ask HN
博客园 - 三生石上(FineUI控件)

博客园 - 绿毛虫

技巧/诀窍:在ASP.NET中重写URL(转) scrollLeft,scrollWidth,clientWidth,offsetWidth到底指的哪到哪的距离之完全详解 asp.net网站统计(转) 呵呵 帮忙顶下咯 您需要掌握的八个CSS布局技巧(转) 采用DIV+CSS布局的好(转) 如何遍历Request的信息(转自孟子E章) 如何把html(form1)中的值用Submit传给serch.aspx页面,在serch.aspx又如何获取呢?(收集) 如何生成静态页面的五种方案(转) 在ASP.Net中使用FCKeditor FCKeditor 2.0 的设置.修改.使用(转) FckEditor中文配置手册详细说明(转) c#文件上传类(转) C#文件上传类(转) 服务器端FileUpload上传控件如何禁止手动输入(原) AJAX入门之深入理解JavaScript中的函数(转) C#文件上传类(转) asp.net利用RAR实现文件压缩解压缩[转载] C#加密解密方法 (转)
重写的支持多验证TextBox控件(转)
绿毛虫 · 2007-11-08 · via 博客园 - 绿毛虫

重写的支持多验证TextBox控件
开发的时候,TextBox是个不得不用,又经常用的东西,经常会遇上是否允许空,数据类型的判断等等,用脚本吧,麻烦;用验证控件吧,也麻烦。自己写了一个,使用的时候选择下属性就OK了,还支持自定义正则表达式验证。以此作为在此的开门之笔吧:)

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Text.RegularExpressions;

namespace rungoo.WebCtrlLib
{
     /**//// <summary>
     /// 重写的TextBox控件
     /// Author: nowind
     /// Date: 2006-5-9
     /// Email:
hgh113@sina.com
     /// QQ:   87505959
     /// <summary>
     ///
     枚举数据#region 枚举数据
     /**//// <summary>
     /// 验证数据类型
     /// </summary>
     public enum DataType
     {
         Never,      //不验证
         String,      //字符串
         Int,      //整数
         IntPostive,     //大于0的整数
         IntZeroPostive,    //大于等于0的整数
         Float,      //数字
         FloatPostive,    //大于0的数字
         FloatZeroPostive,   //大于等于0的数字
         Url,
         Mail,
         //ChineseChars,    //汉字
         EnglishChars,    //英文
         EngNum,      //英文和数字
         EngNumUnerline,    //英文、数字和下划线
         PhoneNumber,    //电话号码
         MobileNumber,    //手机号码
         PostalCode,     //邮政编码
         Custom
     }
     #endregion

     /**//// Attribute DefaultProperty指定组件的默认属性,ToolboxData指定当从IDE工具中的工具箱中拖动自定义控件时为它生成的默认标记
     [DefaultProperty("AllowEmpty"), ToolboxData("<{0}:WebTextBox runat=server></{0}:WebTextBox>")]

     //类MyControl派生自WebControl
     public class WebTextBox : System.Web.UI.WebControls.TextBox
     {
         子控件#region 子控件
         //private System.Web.UI.WebControls.TextBox txtDataInput = new TextBox();
         private System.Web.UI.WebControls.RequiredFieldValidator rfvDataInput = new RequiredFieldValidator();
         private System.Web.UI.WebControls.RegularExpressionValidator revDataInput = new RegularExpressionValidator();
         private Panel pnlFrame = new Panel();     //承载其它控件的容器Panel控件
         #endregion

         private string error = "";

         控件自定义属性#region 控件自定义属性

         [Bindable(true)]
         [Category("自定义信息区")]
         [Browsable(true)]
         [Description("是否允许空值")]
         [DefaultValue("true")]
         public bool AllowEmpty
         {
             get { return ViewState["AllowEmpty"] == null ? true : (bool) ViewState["AllowEmpty"]; }
             set { ViewState["AllowEmpty"] = value; }
         }

         [Bindable(true)]
         [Category("自定义信息区")]
         [Browsable(true)]
         [Description("验证数据类型,默认为不验证")]
         [DefaultValue("IntPostive")]
         public DataType ValidType
         {
             get { return ViewState["ValidType"] == null ? DataType.Never : (DataType) ViewState["ValidType"]; }
             set { ViewState["ValidType"] = value; }
         }

         [Bindable(true)]
         [Browsable(true)]
         [Category("自定义信息区")]
         [Description("自定义验证错误信息")]
         [DefaultValue("")]
         public string ValidError
         {
             get { return ViewState["ValidError"] == null ? "" : (string) ViewState["ValidError"]; }
             set { ViewState["ValidError"] = value; }
         }

         [Bindable(true)]
         [Browsable(true)]
         [Category("自定义信息区")]
         [Description("自定义用于验证的正则表达式,ValidType 为 Custom 时有效")]
         [DefaultValue("")]
         public string ValidExpressionCustom
         {
             get { return ViewState["ValidExpressionCustom"] == null ? "" : (string) ViewState["ValidExpressionCustom"]; }
             set { ViewState["ValidExpressionCustom"] = value; }
         }

         [Bindable(true)]
         [Browsable(true)]
         [Category("自定义信息区")]
         [Description("错误信息提示的CSS类名")]
         [DefaultValue("")]
         public string CssError
         {
             get { return ViewState["CssError"] == null ? "" : (string) ViewState["CssError"]; }
             set { ViewState["CssError"] = value; }
         }

         #endregion

         构造函数#region 构造函数
         public WebTextBox() { }
         #endregion

         EnsureChildControls#region EnsureChildControls
         protected override void EnsureChildControls()
         {
             this.rfvDataInput.CssClass = this.CssError;
             this.rfvDataInput.ErrorMessage = "*输入不能为空";
             this.rfvDataInput.Display = System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
             this.rfvDataInput.EnableViewState = true;
             this.rfvDataInput.ControlToValidate = base.ID;

             this.revDataInput.CssClass = this.CssError;
             this.revDataInput.ErrorMessage = "*输入格式错误";
             this.revDataInput.Display = System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
             this.revDataInput.EnableViewState = true;
             this.revDataInput.ControlToValidate = base.ID;

             //将子控件添加到此自定义控件中
             this.Controls.Add(rfvDataInput);
             this.Controls.Add(revDataInput);
             this.Controls.Add(pnlFrame);
         }
         #endregion

         /**//// <summary>
         /// 根据设置的验证数据类型返回不同的正则表达式样
         /// </summary>
         /// <returns></returns>
         GetRegex#region GetRegex
         private string GetValidRegex()
         {
             string regex = @"(\S)";
             switch (this.ValidType)
             {
             case DataType.Never:
                 break;
             case DataType.Int:
                 error = "*必须为整数";
                 regex = @"(-)?(\d+)";
                 break;
             case DataType.IntPostive:
                 error = "*必须为大于0的整数";
                 regex = @"([1-9]{1}\d*)";
                 break;
             case DataType.IntZeroPostive:
                 error = "*必须为不小于0的整数";
                 regex = @"(\d+)";
                 break;
             case DataType.Float:
                 error = "*必须为数字";
                 regex = @"(-)?(\d+)(((\.)(\d)+))?";
                 break;
             case DataType.FloatPostive:
                 error = "*必须为大于0的数字";
                 regex = @"(\d+)(((\.)(\d)+))?";
                 break;
             case DataType.FloatZeroPostive:
                 error = "*必须为不小于0的数字";
                 regex = @"(\d+)(((\.)(\d)+))?";
                 break;
             case DataType.Url:
                 error = "*URL格式错误";
                 regex = @"(
http://)?([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
                 break;
             case DataType.Mail:
                 error = "*EMail格式错误";
                 regex = @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
                 break;
             //     case DataType.ChineseChars :
             //      error = "*包含中文字符";
             //      regex = @"[^\x00-\xff]";
             //      break;
             case DataType.EnglishChars:
                 error = "*只能输入英文字符";
                 regex = @"[a-zA-Z]*";
                 break;
             case DataType.EngNum:
                 error = "*只能输入英文字符和数字";
                 regex = @"[a-zA-Z0-9]*";
                 break;
             case DataType.EngNumUnerline:
                 error = "*只能输入英文字符、数字和下划线";
                 regex = @"[a-zA-Z0-9_]*";
                 break;
             case DataType.PhoneNumber:
                 error = "*电话号码格式错误";
                 regex = @"(86)?(-)?(0\d{2,3})?(-)?(\d{7,8})(-)?(\d{1,5})?";
                 break;
             case DataType.MobileNumber:
                 error = "*手机号码格式错误";
                 regex = @"(0)?(13)\d{9}";
                 break;
             case DataType.PostalCode:
                 error = "*邮编格式错误";
                 regex = @"\d{6}";
                 break;
             case DataType.Custom:
                 error = "*格式错误";
                 regex = this.ValidExpressionCustom;
                 break;
             default:
                 break;
             }
             if (this.ValidError.Trim() != "")
                 error = this.ValidError;
             return regex;
         }
         #endregion

         将此控件呈现给指定的输出参数#region 将此控件呈现给指定的输出参数
         /**//// <summary>
         /// 将此控件呈现给指定的输出参数。
         /// </summary>
         /// <param name="output"> 要写出到的 HTML 编写器 </param>
         protected override void Render(HtmlTextWriter output)
         {
             base.Render(output);
             output.Write("&nbsp;");

             if (!this.AllowEmpty)
             {
                 this.rfvDataInput.ID = "rfv" + base.ID;
                 this.rfvDataInput.ControlToValidate = base.ID;
                 this.rfvDataInput.RenderControl(output);
             }

             if (this.ValidType != DataType.Never && this.ValidType != DataType.String)
             {
                 this.revDataInput.ID = "rev" + base.ID;
                 this.revDataInput.ControlToValidate = base.ID;
                 this.revDataInput.ValidationExpression = this.GetValidRegex();
                 this.revDataInput.ErrorMessage = error;
                 this.revDataInput.RenderControl(output);
             }
         }
         #endregion

     }
}