c#在同一个字段中使用两个验证器

时间:2009-06-23 12:13:16

标签: c# asp.net rangevalidator

我在尝试修改自己没有构建的表单时遇到了问题。

表单有一个日期值的asp:input字段,由requiredFieldVal和rangeVal检查。 rangeVal的类型设置为“date”,最小值为2000-01-01:最大值3000-01-01

现在问题,我正在尝试添加,以便用户也可以以“20000101”的形式输入日期,换句话说没有“ - ”。

我尝试添加另一个带有Integer类型和最小值,最大值的rangeVal,并将它们放在同一个ValidationGroup中,但是没有用。

如何允许用户在日期输入字段中使用这两种格式(其中一种)格式。

提前谢谢!

2 个答案:

答案 0 :(得分:2)

当您使用多个验证控件来验证单个控件时,所有验证控件都必须通过。

你可以使用一个正则表达式(正如Kevin指出的那样)但是你需要进行验证(检查值是一个有效的DateTime对象并且在指定范围内)将很难干净利落。

我建议您编写自己的CustomValidator控件,然后根据需要使用它来验证您的值。

答案 1 :(得分:0)

您可以使用正则表达式验证程序代替范围验证程序。我对Regex有点生疏,但我相信你能在这里找到一些东西。

http://www.regular-expressions.info/

以下是日期页面的链接:

http://www.regular-expressions.info/dates.html

试试这个,我认为它会起作用。如果没有,请告诉我,我会努力纠正它:

((19|20)\d\d[- /.](0[1-9]|1[012])[-/.](0[1-9]|[12][0-9]|3[01])|((19|20)\d\d(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])))

另一篇文章提出了一个观点,这个正则表达式不会验证像feb 31这样的无效日期。在这种情况下,我只会创建一个继承自regex验证器的验证类,并覆盖EvaluateIsValid方法并检查它是否存在是一个实际的日期。这允许在客户端完成大部分验证,备份在服务器级别,无论如何应该进行二次验证。