using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

using System.ComponentModel;

namespace WebApp.MyControl
{
    /// <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
    }

public class MyTextBox : System.Web.UI.WebControls.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控件

private string error = string.Empty;

public MyTextBox()
        {
            this.Height = 26;
            this.Font.Size = 18;
        }

[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)]
        [Category("自定义属性")]
        [Browsable(true)]
        [Description("是否允许空值")]
        [DefaultValue("true")]
        public bool AllowEmpty
        {
            get { return ViewState["AllowEmpty"] == null ? true : (bool)ViewState["AllowEmpty"]; }
            set { ViewState["AllowEmpty"] = value; }
        }

[Bindable(true)]
        [Browsable(true)]
        [Category("自定义属性")]
        [Description("错误信息提示的CSS类名")]
        [DefaultValue("")]
        public string CssError
        {
            get { return ViewState["CssError"] == null ? "" : (string)ViewState["CssError"]; }
            set { ViewState["CssError"] = 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("自定义验证错误信息")]
        [DefaultValue("")]
        public string ValidError
        {
            get { return ViewState["ValidError"] == null ? "" : (string)ViewState["ValidError"]; }
            set { ViewState["ValidError"] = value; }
        }

/// <summary>
        /// 将子控件添加到此自定义控件中
        /// </summary>
        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);

}

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

/// <summary>
        /// 根据设置的验证数据类型返回不同的正则表达式样
        /// </summary>
        /// <returns></returns>
        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:
                    //匹配中文字符的正则表达式: [\u4e00-\u9fa5]
                    //匹配双字节字符(包括汉字在内):[^\x00-\xff]
                    error = "*只能输入中文字符";
                    regex = @"[\u4e00-\u9fa5]";
                    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;
        }

}
}

asp.net 自定义文本框的更多相关文章

  1. Xamarin Android自定义文本框

    xamarin android 自定义文本框简单的用法 关键点在于,监听EditText的内容变化,不同于java中文本内容变化去调用EditText.addTextChangedListener(m ...

  2. wxpython 支持python语法高亮的自定义文本框控件的代码

    在研发闲暇时间,把开发过程中比较重要的一些代码做个珍藏,下面的代码内容是关于wxpython 支持python语法高亮的自定义文本框控件的代码,应该是对大家也有用. import keywordimp ...

  3. WPF 自定义文本框输入法 IME 跟随光标

    本文告诉大家在 WPF 写一个自定义的文本框,如何实现让输入法跟随光标 本文非小白向,本文适合想开发自定义的文本框,从底层开始开发的文本库的伙伴.在开始之前,期望了解了文本库开发的基础知识 本文实现的 ...

  4. ASP.NET输入文本框自动提示功能

    在ASP.NET Web开发中会经常用到自动提示功能,比如百度搜索.我们只要输入相应的关键字,就可以自动得到相似搜索关键字的提示,方便我们快速的输入关键字进行查询. 那么在ASP.NET中,如果我们需 ...

  5. JavaScript 自定义文本框光标——初级版

    文本框(input或textarea)的光标无法修改样式(除了通过color修改光标颜色).但笔者希望个人创建自己的网站时,文本框的光标有属于自己的风格.所以,尝试模拟文本框的光标,设计有自己风格的光 ...

  6. android自定义文本框,后面带清空按钮

    android常见的带清空按钮的文本框,获得焦点时如果有内容则显示,否则不显示 package com.qc.health.weight; import com.qc.health.R; import ...

  7. Asp.net中文本框全选的实现

    一.鼠标滑过textbox全选 前台: <asp:TextBox runat="server" onMouseOver="this.focus();this.sel ...

  8. Winform 自定义文本框

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. jqgrid 自定义文本框、选择框等查询

    要实现jqgrid的自定义查询可通过表格获取查询的条件,再给jqgrid表格发送postData参数. HTML: <table id="querytable" border ...

随机推荐

  1. TKinter的常用组件

    python提供了多个图形开发界面的库,几个常用Python GUI库如下: Tkinter: Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.T ...

  2. jquery 设置select 默认值

    $('#@(Perfix)OrgType').children("option").each(function () { var temp_value = $(this).val( ...

  3. 程序员书单_HeadFirst系列

    Head First Jquery(中文版),完整扫描版 http://download.csdn.net/detail/shenzhq1980/9103615 Head First Python(完 ...

  4. 【Spring学习笔记-MVC-18.1】Spring MVC实现RESTful风格-同一资源,多种展现:xml-json-html

    概要 要实现Restful风格,主要有两个方面要讲解,如下: 1. 同一个资源,如果需要返回不同的形式,如:json.xml等: 不推荐的做法: /user/getUserJson /user/get ...

  5. SIP 状态码

    SIP应答消息状态码 与功能 类型 状态码 状态说明临时应答(1XX) 100 Trying 正在处理中180 Ringing 振铃181 call being forwarder 呼叫正在前向182 ...

  6. 黄聪:WebBrowser执行和安装jQuery脚本(IEBrowse)

    上一文章说明了如何让 js 脚本访问 .NET 中的类, 这次希望给大家说明一下在任意页面中安装 jQuery 脚本, 并操作页面上的元素. 其实在第一篇关于 IEBrowser 的文章当中, 已经有 ...

  7. 黄聪:HtmlAgilityPack,C#实用的HTML解析类 ---- HtmlNode类

    HtmlAgilityPack中的HtmlNode类与XmlNode类差不多,提供的功能也大同小异.下面来看看该类提供功能. 一.静态属性 public static Dictionary<st ...

  8. Segment fault及LINUX core dump详解 (zz)

    C 程序在进行中发生segment fault(core dump)错误,通常与内存操作不当有关,主要有以下几种情况: (1)数组越界. (2)修改了只读内存. (3)scanf("%d&q ...

  9. catalan---卡特兰数(小结)

    (关于卡特兰数的详细介绍)http://baike.baidu.com/view/2499752.htm 下面有练习的题目: 经过测试,_int64/long long 最大只能表示到33位,超过这个 ...

  10. 0811 css样式表基本

    CSS(Cascading Style Sheets,层叠样式表),作用是美化HTML网页. /*注释*/    注释语法 1. 样式表分类 ①内联样式表 和html联合显示,控制精确,但是可重用性差 ...