0

我想decimal在我的应用程序中验证以下范围内的a MVC3

0.000000001 至 100.000000000

这是Regex我尝试过的,但它不起作用:

(^100([.]0{1,9})?)$|(^\d{1,9}([.]\d{1,9})?)$

  [RegularExpression(@"(^100([.]0{1,9})?)$|(^\d{1,9}([.]\d{1,9})?)$", 
   ErrorMessage ="Decimal value should be between 0.000000000 to 100.000000000")]
  [Range(0, 100, ErrorMessage = " % must be between {1} and {2}")]
  [Display(Name = "Percentage:")]
  public double? Percentage { get; set; }

谁能看到我做错了什么?

4

5 回答 5

1

在您的第二种选择中,您允许点前有 1 到 9 位数字。

(^100([.]0{1,9})?)$|(^\d{1,9}([.]\d{1,9})?)$
                           ^

将此更改为

^(100(\.0{1,9})?|\d{1,2}(\.\d{1,9})?)$

您仍然可以通过将分数移出交替来“简化”这一点

^(100|\d{1,2})(\.\d{1,9})?$

请注意,此表达式确实允许像“00.1”这样的前导零。

在 Regexr 上查看

于 2013-02-01T06:40:16.250 回答
1
^(1\d\d|[1-9]\d|\d)\.\d{0,8}[1-9]$
于 2013-02-01T06:32:09.917 回答
0
^(?:(?:[1]\d)|(?:[1-9]))?\d\.\d{9}$

这将匹配您的范围。此外,它不会匹配小数点前双零的奇数情况,例如:00.000000000。因此,00.000000000 将不是有效数字。

如果你想要它在 0 的右边有可变的小数位,那么你可以使用类似的东西:

^(?:(?:[1]\d)|(?:[1-9]))?\d\.\d{1,9}$

编辑:句子措辞

于 2013-02-02T00:55:27.700 回答
0

这将是所需的正则表达式:

(\d|[1-9]\d)(\.\d{1,9})?|100(\.0{1,9})?

在您的正则表达式中,(^\d{1,9}([.]\d{1,9})?)$匹配一到九位数字(可能是九个 0 到九个 9),后跟可选的小数部分。这就是问题。

于 2013-02-01T06:43:08.383 回答
0

我相信这应该可以解决问题。

\d+\.\d{9}
于 2013-02-01T06:32:53.627 回答