正则表达式验证器不能验证空文本框。

6

我想验证文本框中是否包含特定文本,且不能为空。但是正则表达式验证器无法验证文本框是否为空。只有在文本框中输入内容时才会进行验证。

我该如何使正则表达式验证器即使在文本框为空时也能触发验证?

我应该同时使用必填验证器和正则表达式验证器吗?谢谢。

<asp:TextBox ID="txtcard" runat="server" MaxLength="16"></asp:TextBox>

<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" 
ControlToValidate="txtcard" ErrorMessage="Please type credit card no" 
ValidationExpression="^\d{16}$"></asp:RegularExpressionValidator>
3个回答

6
你应该将你的RegularExpressionValidatorRequiredFieldValidator结合使用。
如果其中任何一个失败,由于验证触发而会被阻止。每个验证器都有其目的,RegularExpressionValidator的目的是验证输入的文本,而不是缺少文本。
如果你想在一个验证器中完成所有操作,可以使用CustomValidator并设置ValidateEmptyText='true'。然后,你可以使用JavaScript正则表达式进行检查。尽管这是一种标准方法,但我仍建议使用两个验证器。

3
你应该同时使用两者。如果值为空,不返回验证错误在ASP.NET验证控件中很常见。你会看到System.ComponentModel.DataAnnotations命名空间中的验证属性也有相同的行为。

+1. 你可以通过自定义DataAnnotationValidator来解决这个问题。我写了一个,但需要继承一个基础对象。它非常有用:http://bit.ly/bcwher 它允许你为属性添加任意数量的ValidationAttributes,并显示导致验证失败的第一个错误消息(就像多个asp验证器一样)。 - Joseph Yaduvanshi

3

我通常会按照您建议的方式进行操作,并添加必填验证器。这将允许您为每个规则设置不同的消息。

另一个选项是建议任何网络开发人员查看JQuery验证插件。如果您将其与Fluent Validation结合使用,则可以将所有业务对象的验证规则保存在一个位置,并且可以使用相同的规则在客户端和服务器端进行验证。

JQuery验证

Fluent Validation


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接