0

我使用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">
4

3 回答 3

0

你可以尝试这样的事情:

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

1-3 位数字后跟任意数量的单个数字(即没有逗号)或分组,末尾,<three digits>有一个可选的。.<1-2 digits>我同意其他人的建议,在处理货币时使用单个小数会令人困惑,因此您可能需要更改{1,2}{2}.

于 2013-04-09T15:13:30.310 回答
0

你没有包括$在你的 regex 中。也许你想要这样的东西。

 ^\$?-?\d+(\.\d{1,2})?$
  ^^^ Add these 3
于 2013-04-09T13:40:12.840 回答
0
^\$-?\d{1,3}(?:,\d{3})*(?:\.\d{2})?$
  • 您必须使用 $ (如果您希望它是可选的,请在之后添加 ?)
  • 你必须使用 ,
  • 我冒昧地将小数设为可选,并且只禁止使用 1 位小数(对货币没有多大意义)

编辑:

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

在这里,逗号是可选的。

于 2013-04-09T13:45:10.023 回答