防止TextBox中的特殊字符

时间:2010-08-31 14:51:11

标签: asp.net

我想阻止用户在TextBox中输入url(如href =“”)。

我想使用正则表达式验证器,但不知道要写什么?

我该怎么做?

6 个答案:

答案 0 :(得分:3)

javascript + regex会这样做,但我没有指向你的标准代码方法。

重要的是要记住,无论你做什么,都无法阻止用户向服务器提交包含不良内容的请求。这意味着你在客户端Web浏览器上使用javascript只是一个创可贴,可以帮助您的用户知道线路的位置。这不是真正的安全代码。真正的安全代码必须在您的服务器上。这就是您需要知道如何处理文本框中输入的网址等内容的地方。

答案 1 :(得分:3)

你的意思是你真的想阻止他们输入TextBox中的文本href=",或者你想阻止URL吗? 无论哪种方式,RegexValidator都是一个解决方案:

实际上,据我所知,没有一种非常简单的方法可以使用OOTB-regex验证器来执行否定包含(即“如果有任何匹配则失败”)。聪明的人可能能够纠正我。但你绝对可以使用自定义验证器:

<asp:TextBox runat="server" id="myTextBox" />
<asp:CustomValidator runat="server" OnServerValidate="ValidateNoUrls" ControlToValidate="myTextBox" ErrorMessage="URLs not allowed" />

代码隐藏:

protected void ValidateNoUrls(object sender, ServerValidateEventArgs e)
{
    e.IsValid = !Regex.IsMatch(e.Value, @"(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?");
}

答案 2 :(得分:1)

当您提到ASP.NET时,您可能希望尝试使用Regex Validator来检查输入,以确保不存在URL模式。看看这个MSDN Article

这个正则表达式可以解决这个问题:@"^(?!.*(mailto\:|(news|(ht|f)tp(s?))\://).*).*$"

答案 3 :(得分:0)

您可以使用按键JS事件并检查输入的模式是否与您要过滤的模式相匹配,您也可以使用onblur事件执行相同操作

答案 4 :(得分:0)

您可能需要考虑在任何情况下在服务器上进行验证(或剥离),因为恶意用户可能会执行直接HTTP POST并绕过您的javascript

答案 5 :(得分:0)

另外,请确保您不通过JS或类似方式仅在客户端进行验证。如果我们说的是Web应用程序,那么您必须进行服务器端验证。也就是说,因为你永远不会知道如何形成一个请求以及它来自哪里。即使不看你的,也很容易形成任何GET / POST请求。