【问题标题】:.NET regex decimal numbers.NET 正则表达式十进制数
【发布时间】:2010-03-05 19:12:10
【问题描述】:

我必须使用 00.00 到 35.35 之间的正则表达式十进制数进行验证,并遵循以下简单假设(我使用的是 C#)。

1) 不需要前导零(可选)。 2) 始终需要 2 位小数。

也就是说,它应该是一个小数点后2位范围内的小数。

有效数字的示例有:0.00、00.00、.67、2.89 并且应该在这些数字上失败:8.9999(4 位小数)、65.00(超出范围)

我很容易验证 2 个小数点,但不知道如何做范围? 这甚至可以使用正则表达式完成吗?

【问题讨论】:

  • 顺便说一句,它是“.NET 正则表达式”,而不是“C# 正则表达式”。相同的正则表达式也适用于 VB.NET 和 F#。
  • 不,不幸的是(幸运?)。这是眼科治疗应用程序数据输入屏幕
  • @John 感谢您的编辑,约翰。是的,我知道,这是一个“.NET 正则表达式”,只是没有正确说明

标签: .net regex


【解决方案1】:

说真的。使用 RegEx 检查输入是否匹配 ^\d{1,2}\.\d{2}$,然后将其转换为数字并检查 0 <= x && x <= 35.35。 RegEx 不是为计算器而设计的。


如果你坚持:

^(?:(?:[012]?\d|3[0-4])\.\d{2}|35\.(?:[012]\d|3[0-5]))$

【讨论】:

  • +1 有些人坚持使用正则表达式来解决所有问题。就像用锤子画画一样。。可能,不推荐
  • @Cody C:用锤子画一幅画会让你得到一些更有“创意”的当代艺术家的称赞。尤其是当你用它来表演时。
【解决方案2】:

我会使用Decimal.TryParse。例如:

    private const decimal min = 0.0M;
    private const decimal max = 35.35M;
    static bool inRange(string s)
    {
        Decimal d = new Decimal();
        if (Decimal.TryParse(s, out d))
        {
            return d > min && d < max;
        }
        else
            return false;
    }

【讨论】:

  • 感谢您的回复。是的,这就是我想知道的 - 使用 RegExValidator 还是仅使用带有这样的方法的 CustomValidator 更好。
  • @VictorS:我认为这比使用正则表达式要好得多,但也许您处于需要正则表达式的情况。
  • @VictorS:这种方法的另一个好处是您可以将此功能放入DecimalRangeValidator 类中,然后通过参数化最大值、最小值将其重用于其他范围(如果有的话) , 和测试值,而不必为要测试的每个范围编写新表达式。
【解决方案3】:

试试这个正则表达式:

^(0?\d|[12]\d|3[0-4])?\.\d\d$|^35\.([02]\d|3[05])$

【讨论】:

  • 上限是35.35,所以35.56不应该通过。
  • 验证 35.35(或任何数值)不应作为正则表达式的一部分进行。这是可能的,但会使事情变得非常棘手和混乱。
  • @Frustrated 是的,我同意这一点,只要看看上面的 RegEx。
猜你喜欢
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多