我将以下正则表达式设置为 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);
如您所见,客户端和服务器端应用了完全相同的模式。
但是,当我清除已验证的控件并提交空字符串时,验证器认为它没问题,并且我从服务器端验证中收到错误。除了正则表达式验证器的契约(Contract)被破坏之外,有人知道这里出了什么问题吗?
最佳答案
这是设计使然。您还应该添加一个 RequiredFieldValidator
来强制用户输入。 RegularExpressionValidator
假定空字段有效(甚至不通过 Regex
运行它们)。其背后的原因是,例如,您的表单中可能有一个可选的电子邮件地址 2
字段,该字段不是必需的,但如果输入了该字段,则它应该是有效的电子邮件地址。为了轻松实现这一点,其他验证器会忽略空字段,如果您需要将它们设为必填字段,只需添加另一个 RequiredFieldValidator
。
事实上,没有必要在服务器上手动重新验证。 ASP.NET 验证器还支持它构建的服务器端验证。您只需检查 Page.IsValid
属性即可。
关于asp.net - RegularExpressionValidator 不检测空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/791260/