我将以下正则表达式设置为Web表单中RegularExpressionValidator的ValidationExpression
属性。当我在经过验证的控件中输入非法字符时,验证程序会检测到它并显示错误消息。
<appSettings>
<add key="categoryPattern" value="^[a-zA-Z0-9_+\-() ]{1,50}$" />
</appSettings>
我的验证员:
<asp:RegularExpressionValidator ValidationExpression="<%$ AppSettings:categoryPattern %>"
我的服务器端验证:
Regex rex = new Regex(ConfigurationManager.AppSettings["categoryPattern"]);
if (!rex.Match(categoryName).Success)
{
throw new ArgumentException("CategoryName must match expression: " + rex);
如您所见,客户端和服务器端应用了完全相同的模式。
但是,当我清除经过验证的控件并提交一个空字符串时,验证器认为它没问题,并且我从服务器端验证中收到错误。任何人都知道这里有什么问题,除了违反了RegularExpressionValidator的合同?
答案 0 :(得分:18)
这是设计的。您还应添加RequiredFieldValidator
以强制用户输入。 RegularExpressionValidator
假定空字段为有效字段(甚至不通过Regex
运行它们)。这背后的原因是,例如,您可能在表单中有一个不需要的可选Email address 2
字段,但如果已输入,则该字段应该是有效的电子邮件地址。为了轻松实现这一点,其他验证器会忽略空字段,如果您需要这些字段,则只需添加另一个RequiredFieldValidator
。
事实上,没有必要在服务器上手动重新验证。 ASP.NET验证器还支持构建它的服务器端验证。您可以查看Page.IsValid
属性。