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

3

我希望确保用户不输入以下任何字符串:\*\|\^\~

在ASP.Net页面中,我应该使用哪个正则表达式来实现此目的?ASP.Net regex validator会自动使用客户端正则表达式进行服务器端验证,还是我需要编写服务器端验证代码?

*** 允许

^|*~ 允许

\** 不允许

\^\|*\~ 不允许

3个回答

2
转义正则表达式的方法是使用反斜杠“\”(例如:\*、\|等)。如果要在客户端上实现此功能,建议使用JavaScript或jQuery。

+1,但是只有当你需要一个非常自定义或不显眼的解决方案时,才需要编写自己的JavaScript / jQuery。这是因为启用EnableClientSide后,asp.net会为您插入客户端代码到页面中。 - Robbie

2
正则表达式通常用于定义一个主题应该匹配的模式。您所要求的是定义一个主题不应该匹配的模式。反向匹配不是正则表达式的内置功能,但是可以通过使用负面环视来模拟这种行为。
以下表达式使用负向前瞻(?!...)来匹配您需要的内容:
^((?!(\\\*)|(\\\|)|(\\\^)|(\\\~)).)*$

这个SO答案提供了一个关于如何使用负向先行断言实现反向正则表达式匹配的优秀解释。

我想这也回答了你关于如何转义反斜杠字符的问题。你只需要像我上面做的那样双重转义即可。

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

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


反斜杠在我的情况下不是转义字符。我实际上想确保用户不输入这两个字符,其中包括反斜杠和跟随反斜杠的字符。 - Sunil
@Sunil 哦,好的,所以您允许使用 ***^|*~ 但不允许使用 *\**\^\|\*\~?也就是说,您的意思是字面上的\*\^等等... - Robbie
*** 允许,^|~ 允许,*** 不允许,^|*~? 不允许。是的我指的是字面意思。谢谢。 - Sunil
好的,那么在这种情况下,您需要使用负向先行断言。我会更新我的答案。 - Robbie
Robbie。非常感谢你的出色回答和帮助。 - Sunil

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

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


标准验证器将在客户端和服务器端进行验证,假设您在代码后台调用“Page.IsValid”进行检查。 - Zhaph - Ben Duguid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接