ASP.Net TextBox控件只允许输入数字

原文:ASP.Net TextBox控件只允许输入数字

1.1、在Asp.Net TextBox 控件的 OnKeyPress 事件中指定输入键盘码必须为数字:

<asp:TextBox ID="TextBox" runat="server" OnKeyPress="if(((event.keyCode>=48)&&(event.keyCode <=57))||(event.keyCode==46)) {event.returnValue=true;} else{event.returnValue=false;}" MaxLength="15"> </asp:TextBox>

    注意:如果不允许输入小数点去掉“event.keyCode==46”这种情况

或者:

<asp:TextBox ID="TextBox" runat="server" onkeyup=‘value=value.replace(/[^d]/g,‘‘) ‘ onbeforepaste=‘clipboardData.setData(‘text‘,clipboardData.getData(‘text‘).replace(/[^d]/g,‘‘))‘ MaxLength="15"> </asp:TextBox>

  类似方法一:

if(e.KeyChar!=8!Char.IsDigit(e.KeyChar)e.KeyChar!=‘.‘){ e.Handled = true; } 

  类似方法二:

if ((e.KeyChar < 48 || e.KeyChar > 57) (e.KeyChar != 8) e.KeyChar!=‘.‘){ e.Handled = true; }

  类似方法三:

if (!Char.IsNumber(e.KeyChar) !Char.IsPunctuation(e.KeyChar) !Char.IsControl(e.KeyChar)){ e.Handled = true;}

  解释:其中e.KeyChar是键盘输入的键对应的字符,IsDigit函数可以判断是否为0到9的数字,Chr(8)

  为退格键,当e.Handled为True时,程序认为该KeyPress事件已经被处理过了,文本框的内容也就不会发生变化

  如果文本需要输入小数的话,就要能够输入小数点.,而且小数点只能输入一次

  //IsNumber:指定字符串中位于指定位置的字符是否属于数字类别

  //IsPunctuation:指定字符串中位于指定位置的字符是否属于标点符号类别

  //IsControl:指定字符串中位于指定位置的字符是否属于控制字符类别

  注意: 这里是在输入时便限制其他类型的字符被写入 TextBox;

  就是说你不输入正确或你输入的不是数字我就不让你做其他任何工作!

  霸道吧? 呵呵, 如果你不喜欢这种方式, 下面有几种允许用户先随便输入,

  然后再判断, 如果不是整数, 我给你来个警告, 告诉你输入类型不正确, 请重新输入!

  ---不过在我看来, 这种做法有些不道德, 等着你犯错.

  类似方法四: 正则表达式.

  

string regExp  =  /^[1-9][0-9]*$/;  
     if(!regExp.test( this.txtLogin.Text))  
     {  
    alert(只能是数字!);  
    this.txtLogin.clear();  
    return ; 
     }

  类似方法五: 最没有想象力的(原始)判断方法---一个一个一个一个字符判断还需要加上个for循环和n个if:

 

function isInt(a)  
     { var b = "0123456789";   
     var i;
        for  (i = 0; i <a.length; i++)  
   {     
     var c = a.charAt(i);  
     if (b.indexOf(c)  ==  -1) return false;  
   }  
   return true;  
 }

1.2、使用规则表达式来验证:

<asp:TextBox ID="UserQQ" runat="server" Columns="18" MaxLength="50" Width="130px"> </asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="UserQQ" ErrorMessage="QQ号只能为数字" validationexpression="\d+"> </asp:RegularExpressionValidator>

1.3、支持多数据类型验证的TextBox:

     

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
    /// <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
        #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>
        #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(" ");
            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
    }
}
时间: 2024-10-10 22:20:21

ASP.Net TextBox控件只允许输入数字的相关文章

TextBox控件只允许输入出生日期,并验证年龄不得小于18岁

1.Body tag <form id="form1" runat="server"> <div> <asp:Label ID="lblDob" runat="server" Text="Date of Birth :"></asp:Label> <asp:TextBox ID="txtDob" runat="server&

关于ASP.net TextBox控件的失去焦点后触发其它事件

编写人:CC阿爸 2015-2-02 今天在这里,我想与大家一起分享如何处理的ASP.net TextBox控件的失去焦点后触发其它事件的问题,在此做个小结,以供参考.有兴趣的同学,可以一同探讨与学习一下,否则就略过吧. 1.首先弄清楚问题,asp.net 2.0服务器控件没有onBlur.因此我们第一个方法是采用 OnTextChanged 来处理有一点要注意,txtVen的autopostback要设置为true.<asp:TextBox ID="txtVen" runat=

WPF第三方控件,只能输入数字型数据

话不多说,根据最近项目需求,为了减少输入验证等相关代码量,需要此控件 先上效果图 默认样式是这样,自己可以根据需求修改外形,但我更喜欢它自带的简洁版 有人可能会问怎么实现的呢?其实很简单,我们设置它的属性  HideUpDownButtons="True"  就可以了 可能有些地方需要其中的数字靠左显示,如下 传统的设置方式对这个控件不起作用,怎么办呢?这里我们只需设置  TextAlignment="Left"  就解决了哈 这个控件的名字叫  Metro:Num

C#中设置TextBox控件中仅可以输入数字且设置上限

首先设置只可以输入数字: 首先设置TextBox控件的KeyPress事件:当用户按下的键盘的键不在数字位的话,就禁止输入 1 private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 2 { 3 if (e.KeyChar != 8 && !Char.IsDigit(e.KeyChar))//如果不是输入数字就不让输入 4 { 5 e.Handled = true; 6 } 7 } 设置上限: 设置TextBox

[摘]ASP.Net标准控件(TextBox控件)

TextBox控件 TextBox控件又称文本框控件,为用户提供输入文本的功能. 1.属性 TextBox控件的常用属性及说明如表1所示. 表1 TextBox控件常用属性及说明 属    性 说    明 AutoPostBack 获取或设置一个值,该值指示无论何时用户在TextBox控件中按〈Enter〉键或〈Tab〉键时,是否自动回发到服务器的操作 CausesValidation 获取或设置一个值,该值指示当TextBox控件设置为在回发发生时进行验证,是否执行验证 ID 控件ID Te

C# TextBox控件只能输入数字

只需要在控件TextBox的keypress事件中写入如下代码即可满足要求: 代码如下: if (e.KeyChar == '.' && this.txbEnd.Text.IndexOf(".") != -1) { e.Handled = true; } if (!((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == '.' || e.KeyChar == 8)) { e.Handled

ASP.NET中TextBox控件设立ReadOnly=&quot;true&quot;后台取不到值

SP.NET中TextBox控件设置ReadOnly="true"H或Enabled=false后台取不到值 当TextBox设置了ReadOnly="true" 后,要是在前台为控件添加了值,后台是取不到的,值为“空”  .    方法一:不设置ReadOnly属性,通过οnfοcus=this.blur()来模拟,如下: <asp:TextBox ID="TextBox1" runat="server" οnfοcu

ASP.NET_验证控件(class0620)

为什么使用验证控件 当需要让用户输入数据时,用户有可能输入不符合我们程序逻辑要求的信息,所以我们要对输入进行验证. 客户端验证(用户体验,减少服务器端压力) 服务器端验证(防止恶意攻击,客户端js很容易就可以被绕过) 必须要对用户输入的数据进行合法性校验,这些校验逻辑很多是重复的,比如字段不能为空.必须为日期格式.数字不能大于100等,而且要同时在客户端和服务器端校验. 验证控件 ASP.Net提供了如下的控件: RequiredFieldValidator:字段必填: RangeValidat

ASP.NET控件&lt;ASP:Button /&gt; html控件&lt;input type=&quot;button&quot;&gt;区别联系

ASP.NET控件<ASP:Button />-------html控件<input type="button">杨中科是这么说的:asp和input是一样的东西 服务器只认识input,我们可以直接写input 但是asp是要把自己自动翻译成input再交给服务器的.其实是一样的东西 写写我看到的区别:                asp控件,直接可以用c#编程                input加上 runat=“server” 也被c#编程了 说白