3

我想确保用户没有输入任何这些字符串:\*or\|\^or \~

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

***允许

^|*~允许

\**不允许

\^\|*\~不允许

4

3 回答 3

2

正则表达式的转义是您已经输入的内容:(\,,\*\|)。至于使用这个。如果您希望在客户端完成此操作,我会使用 javascript/jquery

于 2012-04-20T19:29:04.243 回答
2

正则表达式通常用于定义主题应匹配的模式。您要求的是定义一个主题不应该匹配的模式。反向匹配不是正则表达式的内置功能,但是可以通过使用负环视来模仿这种行为。

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

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

这个 SO answer很好地解释了负前瞻如何实现逆正则表达式匹配行为。

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

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

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

于 2012-04-20T19:38:26.330 回答
0

正则表达式验证器正在客户端验证内容。您可以使用可以在客户端和服务器端进行验证的自定义验证器。

自定义验证器示例:

//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;
   }
}

顺便说一句,如果您同时实现客户端和服务器验证,请注意。有关更多信息,请阅读此问题:表单验证客户端和服务器端

于 2012-04-20T19:38:24.910 回答