我希望确保用户不输入以下任何字符串:\*
或\|
或\^
或\~
。
在ASP.Net页面中,我应该使用哪个正则表达式来实现此目的?ASP.Net regex validator会自动使用客户端正则表达式进行服务器端验证,还是我需要编写服务器端验证代码?
***
允许
^|*~
允许
\**
不允许
\^\|*\~
不允许
我希望确保用户不输入以下任何字符串:\*
或\|
或\^
或\~
。
在ASP.Net页面中,我应该使用哪个正则表达式来实现此目的?ASP.Net regex validator会自动使用客户端正则表达式进行服务器端验证,还是我需要编写服务器端验证代码?
***
允许
^|*~
允许
\**
不允许
\^\|*\~
不允许
(?!...)
来匹配您需要的内容:^((?!(\\\*)|(\\\|)|(\\\^)|(\\\~)).)*$
这个SO答案提供了一个关于如何使用负向先行断言实现反向正则表达式匹配的优秀解释。
我想这也回答了你关于如何转义反斜杠字符的问题。你只需要像我上面做的那样双重转义即可。
关于Asp.Net WebForms中客户端和服务器端验证
RegularExpressionValidator
控件将为您执行客户端和服务器端验证,只要您将EnableClientScript
设置为true
。这将导致在ControlToValidate
失去焦点(客户端)或页面被提交后(服务器端)显示错误消息。
***
和 ^|*~
但不允许使用 *\**
或 \^\|\*\~
?也就是说,您的意思是字面上的\*
或\^
等等... - Robbie正则表达式验证器正在客户端验证内容。您可以使用自定义验证器,在客户端和服务器端进行验证。
自定义验证器示例:
//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;
}
}
顺便提一下,如果您同时实现客户端和服务器端验证,请注意。有关更多信息,请阅读此问题:客户端和服务器端表单验证。
EnableClientSide
后,asp.net会为您插入客户端代码到页面中。 - Robbie