2011-08-04 49 views
0

我的一个视图模型有一个属性,GramWeight,定义为MVC3数据注释正则表达式验证属性失败

[Display(Name="Gram Weight")] 
    [RegularExpression(@"[0-9]*\.?[0-9]+", ErrorMessage = "Gram Weight must be a Number.")] 
    [Range(0, 9999.99, ErrorMessage = "Value must be between 0 - 9,999.99")] 
    public decimal? GramWeight { get; set; } 

当用户输入的值与一家领先的小数点就这一领域的验证失败,这样的为0.23而不是0.23。如果用户将0添加到前面,则验证通过。我曾以为这是我的正则表达式的问题,但我在这个http://regexhero.net/tester/了一些测试,它似乎工作得很好。

所以,如果它不是正则表达式,它是别的东西?我即将准备好使用javascript为用户追加0,如果他们不这样做。这是我最后的选择,但我正在考虑它。

回答

2

是因为它是一个小数类型,你有没有试图改变GramWeight将字符串正好看到验证器在这种情况下怎么办?

+0

我给它一个镜头。 –

+0

好吧,看来当我将属性类型更改为字符串,然后它的工作。虽然这解释了这个问题,但我不确定我喜欢将我的所有小数域作为字符串表示的想法。我认为伟大的观点,但没有其他地方。由于我的模型经常作为域对象,这真的是打击。尽管感谢解决方案。 –

+0

听起来像是一些JavaScript可能会被要求以零前缀,如果它带有小数点开始。你是否也使用客户端验证/输入过滤? –

0

对于那些谁在这里需要一个更好的解决方案是正确的正则表达式验证十进制数:圆点符号前

[RegularExpression(@"[-+]?[0-9]*\.?[0-9]?[0-9]")] 

此正则表达式需要(在你的案件零)数量,并允许最多2位小数。

+0

我想要允许一个前导小数,而不是0.而在许多情况下,我需要一个以上的小数位。 .00125是一个常见值。 –