过滤用户输入对于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