【问题标题】:ASP.NET - Regular Expression ValidatorASP.NET - 正则表达式验证器
【发布时间】:2011-01-05 05:10:36
【问题描述】:

我需要一个只排除可被 1.5 整除的数字的正则表达式。我不知道这是否可能?

我检查了正则表达式库,但上面没有任何内容。有人有什么想法吗?

【问题讨论】:

    标签: asp.net regex validation


    【解决方案1】:

    正如其他人所说,Regex 不是正确的工具,最好使用如下所示的 CustomValidator:

    <asp:CustomValidator ID="DivisibleByOnePointFiveValidator" runat="server" ErrorMessage="Must be divisible by 1.5!"
        Display="Dynamic" ControlToValidate="MyTextBox" EnableClientScript="false" 
        OnServerValidate="DivisibleByOnePointFiveValidator_ServerValidate" >
    </asp:CustomValidator>
    
        protected void DivisibleByOnePointFiveValidator_ServerValidate(object source, ServerValidateEventArgs args)
        {
            decimal inputValue;
            if (!decimal.TryParse(args.Value, out inputValue))
            {
                args.IsValid = false;
                return;
            }
    
            args.IsValid = inputValue % 1.5M == 0;
        }
    

    【讨论】:

      【解决方案2】:

      正则表达式用于字符串验证,而不是数字验证(除了说明某事物是否为数字)。为此,您将需要一个自定义验证器。

      【讨论】:

      • 展开.. RE 应该验证输入是否是一个数字,另一个步骤应该验证它是否可以被 1.5 整除,所以这将是一个两步过程。
      • @DerekH:最好更新你的问题,说你想验证输入是某些允许格式的数字字符串(带/不带小数、前导零、科学记数法、等等...)。
      • 其实不是我的问题,正在扩展基思的答案。我应该指定的!
      【解决方案3】:

      使用正则表达式来验证数值不是一个好主意。最好为此目的编写一个小的验证器函数。

      您可以使用此正则表达式非常轻松地验证数字/非数字:[0-9]+ 当然,这将允许许多前导零并且不考虑小数。您可以变得更复杂,例如[0-9]+(\.(0|[0-9]+))? 我认为这将使小数成为可选的。我们甚至还没有开始研究负号、科学记数法和其他记数法格式。如果您指定允许的输入格式,我们可以更轻松地使用正则表达式提供帮助。

      【讨论】: