ASP.NET中的正则表达式验证器,用于\ *,\ |,\ ^,\〜

时间:2012-04-20 19:26:20

标签: asp.net regex validation negative-lookahead

我想确保用户不输入任何字符串:\*\|\^\~

我将在ASP.Net页面中使用什么正则表达式,ASP.Net regex验证器也会在服务器端使用客户端正则表达式自动验证,或者我需要编写服务器端验证代码?

***允许

^|*~允许

\**不允许

\^\|*\~不允许

3 个答案:

答案 0 :(得分:2)

正则表达式的转义是您已经放置的:\\*\|等)。至于使用这个。如果你想在客户端

上完成,我会使用javascript / jquery

答案 1 :(得分:2)

正则表达式通常用于定义主题应匹配的模式。你要求的是定义一个主题不应该匹配的模式。反向匹配不是正则表达式中的内置功能,但是可以使用negative lookaround来模仿此行为。

以下表达式使用否定前瞻 (?!...)来匹配您所需的内容:

^((?!(\\\*)|(\\\|)|(\\\^)|(\\\~)).)*$

This SO answer提供了关于负前瞻如何实现逆正则表达式匹配行为的出色解释。

我想这也回答了你关于如何逃避反斜杠字符的问题。你只是像我上面那样双重逃脱。

关于Asp.Net WebForms中的客户端+服务器端验证

只要您将RegularExpressionValidator设置为EnableClientScripttrue控件就会为您执行服务器和客户端验证。当ControlToValidate失去焦点(客户端)或页面回发(服务器端)时,这将导致显示错误消息。

答案 2 :(得分:0)

Regular Expression Validator正在验证客户端的内容。您可以使用自定义验证器,它可以在客户端和服务器端验证。

自定义验证器的示例:

//html:
<asp:TextBox ID="textPreferredDate" runat="server"></asp:TextBox>
<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="textPreferredDate" Display="Dynamic" ErrorMessage="Format: m/d/yyyy" OnServerValidate="CustomValidator1_ServerValidate" ClientValidationFunction="validateDate">Invalid format (m/d/yyyy)</asp:CustomValidator><br />

//client side:
<script language="javascript">
function validateDate(oSrc, args)
{
   var iDay, iMonth, iYear;
   var arrValues;
   arrValues = args.Value.split("/");
   iMonth = arrValues[0];
   iDay = arrValues[1];
   iYear = arrValues[2];

   var testDate = new Date(iYear, iMonth - 1, iDay);
   if ((testDate.getDate() != iDay) ||
      (testDate.getMonth() != iMonth - 1) ||
      (testDate.getFullYear() != iYear))
   {
       args.IsValid = false;
       return;
   }

   return true;
} </script>

//server side:
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
   try
   {
      DateTime.ParseExact(args.Value, "d", null);
      args.IsValid = true;
   }
   catch
   {
      args.IsValid = false;
   }
}

顺便提一下,如果同时实现客户端和服务器验证。有关详细信息,请阅读以下问题:Form validation client side and server side