asp.net - RegularExpressionValidator 不检测空字符串

标签 asp.net

我将以下正则表达式设置为 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/

相关文章:

c# - 在 ASP.NET WebForm 中输入按键事件执行按钮点击

asp.net - 我可以更改 FormsAuthentication cookie 名称吗?

javascript - 更新面板中的按钮不会由 JavaScript 触发

c# - asp网格中如何在表格的顶部添加新行

asp.net - Restful WCF无法达到操作合约

c# - 如何在 ASP.Net webapp 中的引用项目 DLL 中初始化 AutoMapper 配置文件

asp.net - 以 ASP.NET 形式提供 'review' 阶段的简洁方法

javascript - 重定向到 Razor 应用程序中的另一个 View

asp.net - 找不到与命令 "dotnet-./..dll"匹配的可执行文件

c# - WEB API 2 身份 - 使用现有数据库