在MVC中使用$和进行货币验证

时间:2013-04-09 13:38:23

标签: javascript asp.net-mvc regex asp.net-mvc-3 validation

我使用 jQuery验证器插件

在下面使用货币验证定义了此模型对象
Model Item
{
       [DisplayFormat(DataFormatString = "{0:F2}")]
        [RegularExpression(@"^-?\d+(\.\d{1,2})?$", 
           ErrorMessage = "Enter a valid money value. 2 Decimals only allowed")]
        public decimal? Price{ get; set; }
}

但是当我输入$165,600.70时,我得到Enter a valid money value. 2 Decimals only allowed.这是来自用户点的有效输入。

但是,如果他们输入165640.73 it is working

我如何让这个正则表达式适用于两者?有关重写此正则表达式的任何帮助吗?

呈现HTML

<input data-val="true" data-val-number="The field Price must be a number." 
data-val-regex="Enter a valid money value. 2 Decimals only allowed" 
data-val-regex-pattern="^\$?-?\d+(\.\d{1,2})?$" id="Price" name="Price" 
type="text" value="$165,600.70">

3 个答案:

答案 0 :(得分:0)

您的正则表达式中没有包含$。也许你想要这样的东西。

 ^\$?-?\d+(\.\d{1,2})?$
  ^^^ Add these 3

答案 1 :(得分:0)

^\$-?\d{1,3}(?:,\d{3})*(?:\.\d{2})?$
  • 你必须使用$(如果你想要它,可以添加一个?)
  • 您必须使用
  • 我冒昧地将小数作为可选项,并禁止只有1位小数(对货币没有多大意义)

修改

^\$-?\d{1,3}(?:(,?)\d{3}(?:\1\d{3})*)?(?:\.\d{2})?$

在这里,逗号是可选的。

答案 2 :(得分:0)

您可以尝试这样的事情:

^\$-?\d{1,3}(?:(?:,\d{3})+|\d+)?(?:\.\d{1,2})?$

1-3个数字,后跟任意数字的单个数字(即没有逗号)或,<three digits>的分组,最后有一个可选的.<1-2 digits>。我同意其他人建议在使用货币时使用一个小数字会让人感到困惑,因此您可能希望将{1,2}更改为{2}