Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex MVC3数据批注正则表达式验证程序属性失败_Regex_Asp.net Mvc 3_Validation_Jquery Validate - Fatal编程技术网

Regex MVC3数据批注正则表达式验证程序属性失败

Regex MVC3数据批注正则表达式验证程序属性失败,regex,asp.net-mvc-3,validation,jquery-validate,Regex,Asp.net Mvc 3,Validation,Jquery Validate,我的一个视图模型有一个属性GramWeight,定义为 [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,定义为

    [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; }
当用户输入带前导小数点的值时,此字段的验证失败,例如.23而不是0.23。如果用户将0添加到前面,则验证通过。我以为这是我的正则表达式的问题,但我在这里运行了一些测试,它似乎工作得很好


那么,如果它不是正则表达式,它是其他的吗?如果用户无法添加0,我准备使用javascript为用户添加0。这是我最后的选择,但我正在考虑。

是否因为它是十进制类型,您是否尝试过将
GramWeight
更改为字符串,以查看验证器在这种情况下的功能?

对于需要更好解决方案的人,这里有一个正确的正则表达式来验证十进制数:

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

这个正则表达式在点符号之前需要一个数字(在您的例子中是零),最多允许2位小数。

好的,当我将属性类型更改为字符串时,它似乎可以工作。虽然这可以解释问题,但我不确定我是否喜欢将所有十进制字段表示为字符串的模型。我想这景色不错,但没有别的地方。由于我的模型经常充当域对象,所以这真的很糟糕。不过感谢您的解决方案。听起来可能需要一点javascript,如果它以小数点开头,则可以使用零作为前缀。您是否也在使用客户端验证/输入筛选?是的,我也在使用。我对很多东西都不熟悉。捕捉前导小数并附加零的最佳方法是什么?我在想《蓝侠》。如果我这样做,它会在客户端验证启动之前启动吗?您可以在调用服务器端代码的点上加上0的前缀。但是在用户离开时将输入更改为零可能会让用户感到困惑。如果可能的话,如果你是为某类客户写这篇文章,你可以试着问他们是否有偏好,甚至是原型设计。我建议使用Jing,如果你不能在他们面前看到一些东西,那么你可以说服他们解决这个问题。我建议不要使用视图模型作为域对象。此外,用户输入的所有内容实际上都是字符串。视图模型的自动绑定可以将适当的字符串转换为int等。但是,有些用户可能会执行类似1000的操作,这将无法绑定。我建议将all作为字符串,并运行regexpr进行验证。一旦进入控制器,验证,然后让控制器简单地负责将视图模型转换为域对象,然后调用需要执行的任何业务逻辑或crud。我想允许一个前导小数,而不是0。在很多情况下,我需要不止一个小数位。00125是一个常用值。