Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET中的正则表达式验证器,用于\*,\\\;,\^\~_Asp.net_Regex_Validation_Negative Lookahead - Fatal编程技术网

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

ASP.NET中的正则表达式验证器,用于\*,\\\;,\^\~,asp.net,regex,validation,negative-lookahead,Asp.net,Regex,Validation,Negative Lookahead,我想确保用户没有输入以下任何字符串:\*或\\\\或\^或\~ 在ASP.Net页面中,我将使用什么正则表达式进行验证,ASP.Net正则表达式验证器也将使用客户端正则表达式在服务器端自动验证,或者我需要编写服务器端验证代码 ***允许 ^ |*~允许 \**不允许 \^\\\\\*~不允许正则表达式的转义是您已经放置的:\(\*,\\等)。至于使用这个。如果您希望在客户端执行此操作,我将使用javascript/jquery。正则表达式验证器正在验证客户端的内容。您可以使用自定义验证器,它可以

我想确保用户没有输入以下任何字符串:
\*
\\\\
\^
\~

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

***
允许

^ |*~
允许

\**
不允许


\^\\\\\*~
不允许

正则表达式的转义是您已经放置的:
\
\*
\\
等)。至于使用这个。如果您希望在客户端执行此操作,我将使用javascript/jquery。正则表达式验证器正在验证客户端的内容。您可以使用自定义验证器,它可以在客户端和服务器端进行验证

自定义验证器的示例:

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

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

以下表达式使用负前瞻
(?!…)
来匹配所需内容:

^((?!(\\\*)|(\\\|)|(\\\^)|(\\\~)).)*$
提供了关于负前瞻如何实现反向正则表达式匹配行为的极好解释

我想这也回答了你关于如何避开反斜杠字符的问题。你只要像我上面所做的那样加倍逃跑就行了

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


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

+1,但是如果您想要一个非常定制或不引人注目的解决方案,您只需要编写自己的javascript/jquery。这是因为
EnableClientSide
设置为true时,asp.net将为您将客户端代码插入页面。在我的情况下,反斜杠不是转义字符。实际上,我想确保用户输入的这两个字符没有包含反斜杠和反斜杠后面的字符。@Sunil啊,好吧,这样您就可以允许
***
^*~
,但不允许
***
\^\\\\*~
?i、 e.您的意思是文字
\*
\^
等…**允许、^允许、\**不允许、\^\\*\~?不允许。是的,我是说字面意思。谢谢,所以在这种情况下,你需要使用负面环视。我会更新我的答案。谢谢。非常好的回答和帮助。标准验证器将在客户端和服务器端进行验证,假设您在代码中调用“Page.IsValid”进行检查。