当输入为 0.00 时,RegularExpression 验证在 ModelState.IsValid 处失败

RegularExpression validation fails at ModelState.IsValid when input is 0.00

我遇到了类似

的问题

我正在使用 MVC。我在我的 ViewModel 中添加了一个 正则表达式 以强制用户输入带有 1 位或 2 位小数的数字。我在想我的正则表达式一定有错误,但同样的语句在其他地方工作正常。

如果我输入 0.00 作为费率,当我提交表格时,ModelState.IsValid returns 为 false.

[RegularExpression(@"^(\d+\.\d{1,2})$", ErrorMessage = "Please enter valid rate with 1 or 2 decimal places")]
public double DecimalRate { get; set; }

根据 this question 中的建议,我已通过在 Visual Studio 中的 ModelState.IsValid 处设置调试并检查错误来验证此速率是导致错误的原因。

我有一种预感,它可能与 double?

类型的属性有关

发生这种情况是因为您的 属性 的数据类型是 double(不是 string),因此它不代表一系列字符。它代表一个数值。如果您的输入是 0.00,那么它将代表值 0,而不匹配正则表达式。我怀疑您也会遇到 3.00 等数字的相同问题。

如果您需要用户的输入采用特定格式,请将您的字段更改为 string,然后在需要将其转换为数字时使用 Convert.ToDouble()