RegEx为十进制,具有N位精度

时间:2013-02-01 06:27:46

标签: c# asp.net regex asp.net-mvc-3

我想在我的decimal申请中验证以下范围内的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; }

谁能看到我做错了什么?

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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”。

查看here on Regexr

答案 2 :(得分:0)

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

\d+\.\d{9}

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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

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

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

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

编辑:句子措辞