ASP.Net TextBox控制項只允許輸入數字

來源:互聯網
上載者:User

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;
  就是說你不輸入正確或你輸入的不是數字我就不讓你做其他任何工作!
  霸道吧? 呵呵, 如果你不喜歡這種方式, 下面有幾種允許使用者先隨便輸入,
  然後再判斷, 如果不是整數, 我給你來個警告, 告訴你輸入類型不正確, 請重新輸入!
  ---不過在我看來, 這種做法有些不道德, 等著你犯錯.

  類似方法四: Regex.
  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
    /// Date: 2006-5-9
    /// Email: hgh113@sina.com
    /// QQ: 87505959
   /// Home:http://www.mofun.cc
    /// <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("自訂用於驗證的Regex,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>
        /// 根據設定的驗證資料類型返回不同的Regex樣
        /// </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("&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

    }
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.