我想确保用户不输入任何字符串:\*
或\|
或\^
或\~
。
我将在ASP.Net页面中使用什么正则表达式,ASP.Net regex验证器也会在服务器端使用客户端正则表达式自动验证,或者我需要编写服务器端验证代码?
***
允许
^|*~
允许
\**
不允许
\^\|*\~
不允许
答案 0 :(得分:2)
正则表达式的转义是您已经放置的:\
(\*
,\|
等)。至于使用这个。如果你想在客户端
答案 1 :(得分:2)
正则表达式通常用于定义主题应匹配的模式。你要求的是定义一个主题不应该匹配的模式。反向匹配不是正则表达式中的内置功能,但是可以使用negative lookaround来模仿此行为。
以下表达式使用否定前瞻 (?!...)
来匹配您所需的内容:
^((?!(\\\*)|(\\\|)|(\\\^)|(\\\~)).)*$
This SO answer提供了关于负前瞻如何实现逆正则表达式匹配行为的出色解释。
我想这也回答了你关于如何逃避反斜杠字符的问题。你只是像我上面那样双重逃脱。
关于Asp.Net WebForms中的客户端+服务器端验证
只要您将RegularExpressionValidator
设置为EnableClientScript
,true
控件就会为您执行服务器和客户端验证。当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