如何检查文本框是否包含数字

过滤用户输入对于Web编程极为重要。

如果没有输入内容,则用户可以输入可能破坏您的网站的恶意代码。

本文将说明如何确保用户仅将数字提交到您的.NET Web应用程序,还演示如何将JavaScript添加到ASPX页面。 根据大众的需求,我添加了一个部分,其中还介绍了如何使用

验证程序控件,以检查文本框是否包含数字。 验证程序控件非常酷。 可以将它们配置为在客户端工作,以防止不必要的回发到服务器,并且如果检测到任何验证错误,可以将Page.IsValid属性设置为false,以便您也可以在服务器代码中采取适当的措施。

这是本文涵盖的部分:

  • 服务器端验证
  • 客户端验证
  • 将客户端脚本添加到您的.NET Web应用程序
  • 调用客户端脚本
  • 使用ASP.NET验证程序来验证数据
服务器端验证

强烈建议您检查服务器端代码中提交给服务器的所有输入。 用户有可能绕过客户端检查并提交恶意代码。 无论何时提交Web表单,都应检查以确保所有字段都包含有效数据,以帮助防止您的网站被黑客入侵。

在这种情况下,我们需要检查用户是否在单击名为Button1的按钮后是否在名为TXT_Number的文本框中输入了数字。

下面是一些示例,如何使用Integer类检查TXT_Number文本框是否包含数字。

Integer.Parse()方法采用一个字符串,然后尝试将其转换为Integer。 如果它不能将String转换为Integer,则会引发一个异常,您可以捕获该异常。 如果引发异常,则说明您未输入用户整数(或该数字太大或太小而无法容纳整数)。

例:

(VB)


 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Try
        Integer.Parse(TXT_Number.Text)
    Catch ex As Exception
        LBL_NumberError.Text = "You have not entered a number"
    End Try
End Sub 
(C#)

private void Button1_Click(object sender, EventArgs e)
{
    try
    {
        int.Parse(TXT_Number.Text);
    }
    catch
    {
        LBL_NumberError.Text = "You have not entered a number";
    }
} 
重申一下:在上面的代码中,如果TXT_Number文本框中的文本值不是数字,则Integer.Parse()将引发异常。 然后捕获异常,并在标签LBL_NumberError中显示错误消息。 这是我想到的最简单的方法来检查用户是否输入了数字。

您也可以使用Integer.TryParse()方法。 此方法还尝试将字符串转换为数字。 根据是否能够将文本转换为数字而不是引发异常,它返回true或false。 这是使用Integer.TryParse方法的示例:

(VB)


 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim checkNumber As Integer
  If Integer.TryParse(TXT_Number.Text, checkNumber) = False Then
        LBL_NumberError.Text = "You have not entered a number"
    End If
End Sub 
(C#)

private void Button1_Click(object sender, EventArgs e)
{
    int checkNumber;
    if(int.TryParse(TXT_Number.Text.checkNumber) == false){
        LBL_NumberError.Text = "You have not entered a number";
    }
} 
每个数字数据类型都有解析方法。 例如,有Double.Parse和Double.TryParse方法,Float.Parse和Float.TryParse方法等。使用适当的数据类型检查所需的数字。 客户端验证

假设我们甚至都不希望用户能够在文本框中输入数字。 为此,我们必须使用客户端脚本。

以下JavaScript代码段检查用户按下的键,如果不是数字,则返回False。

(JavaScript)


<script type="text/javascript">
<!--
 function NumberFilter(e)
 {  /*Grabbing the unicode value of the key that was pressed*/
    var unicode;
    try
    {   /*IE*/
        unicode = e.keyCode; 
    }
    catch(err)
    {   
        try
        { /*Netscape, Mozilla, FireFox...*/
             unicode = event.keyCode;
        }
        catch(error)
        {  /*Other*/
            unicode = e.which;
         }
     }
    /*if the value entered is not a unicode value between 48 and 57 return false*/
    if(unicode < 48 || unicode > 57)
    {  
      return false;
    } 
    return true;
 }
-->
</script> 
将客户端脚本添加到您的.NET Web应用程序

我敢打赌,您想知道如何在.NET Web应用程序中使用此代码。

非常简单。

首先,将代码复制到aspx页面的主体中。

或者,您可以使用ClientScript.RegisterStartupScript注册脚本:

(VB)


If Page IsNot Nothing Then
  If Not ClientScript.IsStartupScriptRegistered("NumberScreening_Script") Then
    Dim sb As StringBuilder = New StringBuilder
    sb.Append("<script type='text/javascript'> "+ vbLF + "<!--")
    sb.Append(" function NumberFilter(e)" + vbLf)
    sb.Append("{" + vbLf)
    sb.Append("  var unicode;" + vbLf)
    sb.Append("  try" + vbLf)
    sb.Append("  {" + vbLf)
    sb.Append("   unicode = e.keyCode; " + vbLf)
    sb.Append("  }" + vbLf)
    sb.Append("  catch(err)" + vbLf)
    sb.Append("  {   " + vbLf)
    sb.Append("     try" + vbLf)
    sb.Append("     {" + vbLf)
    sb.Append("         unicode = event.keyCode;" + vbLf)
    sb.Append("     }" + vbLf)
    sb.Append("     catch(error)" + vbLf)
    sb.Append("     { " + vbLf)
    sb.Append("        unicode = e.which;" + vbLf)
    sb.Append("     }" + vbLf)
    sb.Append("   }" + vbLf)
    sb.Append("   if(unicode < 48 || unicode > 57)" + vbLf)
    sb.Append("   {  " + vbLf)
    sb.Append("      return false;" + vbLf)
    sb.Append("   } " + vbLf)
    sb.Append("   return true;" + vbLf)
    sb.Append("}" + vbLf)
    sb.Append("// -->" + vbLf)
    sb.Append("</script>" + vbLf)
    ClientScript.RegisterStartupScript(Page.GetType, "NumberScreening_Script", sb.ToString())
  End If
End If 
如果要将该脚本包含在Web用户控件中,则建议使用第二种方法,以确保仅将脚本写入浏览器一次,因为在网站上可能有该控件的多个实例。

请注意,如果您在页面(UpdatePanel)中使用Ajax,则不能使用ClientScript.RegisterStartupScript()方法。 您必须通过调用来向ScriptManager注册脚本

而是使用ScriptManager.RegisterStartupScript()方法 。 如果您使用的是Ajax,请通过ScriptManager的方法来检查通过ScriptManager可用的所有方法来注册脚本。

您也可以将JavaScript放入其自己的.js文件中,并使用ClientScript.RegisterStartupScript()方法或ScriptManager注册方法在页面中注册.js文件。

调用客户端脚本

将客户端脚本包含在aspx页中后,需要调用用于过滤文本框JavaScript函数。 通过将“ OnKeyPress”属性添加到应保存数字值的文本框中来执行此操作。 (回想一下此示例的文本框称为TXT_Number。)

为此,您只需执行以下操作

(VB)


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     TXT_Number.Attributes.Add("OnKeyPress", "return NumberFilter()")
End Sub 
(C#)

Protected Sub Page_Load(Object sender, System.EventArgs e) 
{
     TXT_Number.Attributes.Add("OnKeyPress", "return NumberFilter()");
} 
或者,您可以将调用直接添加到TextBox的ASP.NET代码标记中。 像这样:

<asp:TextBox ID="TXT_Number" runat="Server" OnKeyPress="reutrn NumberFilter()" />
用户在文本框中输入内容时,每按一次键,JavaScript函数都会检查该值是否为数字,并返回“ true”以允许该字符输入文本框中,否则返回“ false”,并且没有任何内容添加到文本框。 使用ASP.NET验证程序来验证数据

用一个

验证程序控制 ,是验证用户输入的好方法。 您可以将这些控件配置为在客户端运行,以防止不必要的往返服务器往返。 如果用户能够有目的地尝试提交无效数据,从而避开了JavaScript验证(这很容易做到),则可以检查服务器端的Page.IsValid属性,以防止发生以下情况下不应执行的任何数据处理:数据无效。 这将防止任何不希望的结果。

在我们的示例中,我们要检查TextBox是否包含数字。 为此,您需要检查以确保用户已在TextBox中输入一个值,并且该值是一个数字。 您需要添加一个

RegularExpressionValidator到页面,并将其链接到与之关联的TextBox:

(ASP.NET“添加”视图代码)


 <div>
        <asp:Label ID="NumberEntryPrompt" runat="server" Text="Please enter a number:"></asp:Label>
        <asp:TextBox ID="TXT_Number" runat="server" />
        <asp:RegularExpressionValidator ID="RegExValidatorForTxt_Number" runat="server"
           ControlToValidate="TXT_Number"
           Text="Please enter a number" 
           EnableClientScript="true"
           ValidationExpression="^[0-9]*$">
        </asp:RegularExpressionValidator> 
        <asp:Button ID="Button1" Text="Submit" OnClick="Button1_Click" runat="server" />
        <asp:Label ID="errorLabel" runat="server" />
  </div>
请注意,EnableClientScript属性如何设置为True?

这将执行一些JavaScript,以检查TextBox是否包含与提供的正则表达式匹配的信息。 在这种情况下,正则表达式检查值是否以数字开头,包含1个或多个数字并以数字结尾。 如果没有,那么在您提交页面(单击按钮)时,将出现“请输入数字”消息,并且不会回发到服务器。

如果将EnableClientScript属性设置为false,则该页面将提交到服务器,并且在返回浏览器后,将显示“请输入文本”消息。 如果将页面提交到服务器,则需要检查服务器端代码中的Page.IsValid属性是true还是false。 如果无效,则表明页面上存在验证错误,您可以采取适当的措施。 在这种情况下(验证TextBox是否包含数字),最好的操作是在页面无效的情况下不对服务器端进行任何处理。 但是,出于示例目的,我们将设置“标签的文本”以指示页面是否有效。

例如,单击按钮时将执行以下操作:

(VB)


Protected Sub ButtonClick(ByVal sender As Object,ByVal e As EventArgs)
    If (Page.IsValid) Then
        errorLabel.Text = "Page is valid."
    Else
        errorLabel.Text = "Page is not valid!!"
    End If
End Sub
(C#)

protected void Button1_Click(Object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        errorLabel.Text = "Page is valid.";
    }
    else
    {
        errorLabel.Text = "Page is not valid!!";
    }
}
摘要

使用JavaScript来确保用户只能输入数字非常有用,但是请记住,有很多方法可以解决此问题。 在使用数据之前,请务必确保包括服务器端数据验证以确保数据有效。 ASP.NET验证程序控件是一种验证用户输入的好方法,因为可以将它们配置为验证客户端,并且还可以将Page.IsValid属性设置为false(如果无效),从而提供一种检查页面是否有效的服务器-在执行任何操作之前。 我认为,如本文所述,将Validator控件与侧面验证结合起来是输入验证的最佳方法。

希望对您有所帮助!

编码愉快!

-弗林尼

From: https://bytes.com/topic/asp-net/insights/654366-how-check-if-textbox-contains-number

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值