RegularExpression validation fails at ModelState.IsValid when input is 0.00

放肆的年华 提交于 2021-02-10 05:14:59

问题


I have a problem similar to this question

I'm using MVC. I have added a regular expression in my ViewModel to force the users to enter a number with 1 or 2 decimal places. I am thinking there must be an error in my Regex but the same statement is working fine elsewhere.

If I put in 0.00 as my rate, when I submit my form, ModelState.IsValid returns as false.

[RegularExpression(@"^(\d+\.\d{1,2})$", ErrorMessage = "Please enter valid rate with 1 or 2 decimal places")]
public double DecimalRate { get; set; }
  • If I type any invalid input, it behaves as expected, displaying the proper error message and not letting me save the page
  • If I put valid input (other than 0.00), it saves properly.
  • If I remove the Regex completely, 0.00 is seen as valid input and it saves properly.

As per a suggestion in this question, I have verified that this rate is causing the error by setting a debug at ModelState.IsValid in Visual Studio and checking the errors.

I have a hunch it might have something to do with the attribute being of type double?


回答1:


This is happening because your property's data type is double (not string), so it doesn't represent a series of characters. It represents a numerical value. If your input is 0.00, then it will represent the value 0, and not match the regex. I suspect you will encounter the same issue for numbers like 3.00 as well.

If you need the user's inputs to be in a specific format, change your field to a string and then use Convert.ToDouble() when and if you need to convert it to a number.



来源:https://stackoverflow.com/questions/37926370/regularexpression-validation-fails-at-modelstate-isvalid-when-input-is-0-00

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!