【问题标题】:Multiple Validation against a field针对字段的多重验证
【发布时间】:2012-10-18 18:04:01
【问题描述】:

我目前想知道字段的服务器端验证。

例如我有一个不能为空的字段,必须是数字并且必须小于 999999。

要验证的示例代码是:

 If checkNumeric(txtBaseSalary.Text) = True Then
            txtBaseSalary.CssClass = "text"
        Else
            x += 1
            step_4 += 1
            txtBaseSalary.CssClass = "text error"
 End If

If val(txtBaseSalary.Text) = 0 or val(txtBaseSalary.Text) > 999999  Then
            x += 1
            step_4 += 1
            txtBaseSalary.CssClass = "error text"
        Else
            txtBaseSalary.CssClass = "text"
End If

但是我确定你已经发现了这个问题,如果它没有通过第一次验证但通过了第二次验证,那么错误量 (step_4) 将会增加,但是如果通过了第二次验证,那么视觉表示就会被清除。

有没有人在没有嵌套 if 语句的情况下对一个字段进行多次验证?

另外,请提供可适用于需要多次验证的任何情况的解决方案,而不仅仅是这里是一种您可以验证我发布的一种情况的方法。

【问题讨论】:

  • 为什么不使用 ASP.NET 验证控件msdn.microsoft.com/en-us/library/aa479013.aspx
  • 使用CustomValidatorValidateEmptyText=true。然后使用regex
  • 如果第一个失败,你还需要检查第二个条件吗?如果不是,请使用“else if”,以便在第一次失败后停止。 (请注意,其他人在使用开箱即用验证时提供了一些很好的参考。)
  • 正确我不需要做第二次检查,如果第一次失败@RayK 但是我想避免使用多个 if 语句,因为我可以对一个字段说 5 次检查,具体取决于其他输入。
  • @TimSchmelter 可以扩展 CustomValidator 以允许我指定新检查并为新检查创建正则表达式吗?

标签: asp.net vb.net validation


【解决方案1】:

你可以

  • 使用CustomValidatorValidateEmptyText=true 以及检查您的状况的代码或
  • 使用RequiredFieldValidator 检查空文本使用CompareValidator 检查给定范围内的数值。

<asp:CompareValidator runat="server" 
    id="cmpNumbers" 
    controltovalidate="txtBaseSalary" 
    valuetocompare="999999"
    operator="LessThan" 
    type="Integer" 
    errormessage="The number should be smaller than 999999!" /><br />

您可以使用 Ajax ValidatorCalloutExtender 在错误时应用您的 CSS。另一种选择是使用JQuery

【讨论】:

  • 我确实喜欢这样的声音,我可以扩展它并添加我自己的检查,例如我可以针对该字段进行 4 次不同的验证吗?
  • 或者我会说这些 asp:comparevaldiator 中的 4 个不同的在控制之下?
  • @RyanMcDonough:CustomValidator 可以扩展为允许任何操作。它是最灵活但也是最复杂的验证器类型。我会选择RequiredFieldValidator + CustomValidator 方法。您可以为每个验证器提供一条错误消息。因此,最好为每次检查提供不同的验证器,然后您还可以提供不同的错误消息。启用/禁用验证器或为每个验证器分配不同的Validation Groups 也更容易。
【解决方案2】:

您可以更好地创建一个数字文本框控件。它将避免检查 checkNumeric。

【讨论】:

    【解决方案3】:

    对该表达式进行单个正则表达式比较

    ^([0-9]{1,6})$
    

    将强制它为数字并且介于 0 和 999999 之间。

    你可以使用你写的方法(因为你似乎想增加'x'和'step_4')

    using System.Text.RegularExpressions;
    Regex r = new Regex("^([0-9]{1,6})$");
    Match m = r.Match(text);
    if (m.Success)...  
    

    MSDN Documentation

    或者您可以使用开箱即用的验证器:

     <asp:RegularExpressionValidator 
       ID="regexpName" runat="server"     
       ErrorMessage="error text." 
       ControlToValidate="txtName"     
       ValidationExpression="^([0-9]{1,6})$" />
    

    More MSDN Documentation

    【讨论】:

    • 为回复干杯,尽管正如我所说,我希望答案足够笼统,适用于我想要进行多重验证的任何情况,而不仅仅是这一个实例。虽然看起来正则表达式是答案,并且可以一次性进行多项检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多