Подтвердить десятичное значение до двух знаков после запятой с аннотациями данных?
У меня это в моей модели:
[Required(ErrorMessage = "Price is required")]
[Range(0.01, 999999999, ErrorMessage = "Price must be greater than 0.00")]
[DisplayName("Price ($)")]
public decimal Price { get; set; }
Я хотел бы подтвердить, что пользователь не вводит более двух знаков после запятой. Поэтому я хотел бы иметь
Допустимые значения: 12, 12.3, 12.34
Недопустимые значения: 12., 12.345
Есть ли способ проверить это с помощью аннотации данных?
Ответы
Ответ 1
Вы можете использовать атрибут RegularExpression с регулярным выражением, которое соответствует вашим критериям. Здесь есть целая куча выражений, которые включают числа, я уверен, что один будет соответствовать счету. Вот ссылка .
Это поможет вам начать работу, хотя она может быть не такой общей, как вы хотите (требуется, по крайней мере, одна цифра, ведущая десятичную точку):
[RegularExpression(@"\d+(\.\d{1,2})?", ErrorMessage = "Invalid price")]
Обратите внимание, что трудно выдать точное сообщение об ошибке, потому что вы не знаете, какая часть регулярного выражения не соответствовала (например, строка "z.22" имеет правильное количество десятичных знаков, но не действительная цена).
Ответ 2
[RegularExpression(@"^\d+.\d{0,2}$",ErrorMessage = "Price can't have more than 2 decimal places")]
public decimal Price { get; set; }
Это будет содержать от 0 до 2 знаков после запятой или вообще ничего.
Ответ 3
[RegularExpression(@"^\d+(\.\d)?$", ErrorMessage = "It cannot have more than one decimal point value")]
[Range( 0.1,100)]
public double xyz{get;set;}
Он работает для меня до одного десятичного значения
Ответ 4
Вы также можете создать свой собственный атрибут проверки десятичной суммы, наследующий от RegularExpressionAttribute:
public class DecimalAttribute : RegularExpressionAttribute
{
public int DecimalPlaces { get; set; }
public DecimalAttribute(int decimalPlaces)
: base(string.Format(@"^\d*\.?\d{{0,{0}}}$", decimalPlaces))
{
DecimalPlaces = decimalPlaces;
}
public override string FormatErrorMessage(string name)
{
return string.Format("This number can have maximum {0} decimal places", DecimalPlaces);
}
}
и зарегистрируйте его, чтобы включить проверку на стороне клиента в Application_Start():
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(DecimalAttribute), typeof(RegularExpressionAttributeAdapter));
Ответ 5
Вы можете выполнить эту проверку с помощью регулярного выражения и применить его с атрибутом RegularExpression.
Ответ 6
У меня был тот же сценарий, что и OP, но предоставленные ответы не дают решения, которое работает для всех следующих случаев:
12, 12.3 and 12.34
Для этого мы используем следующее регулярное выражение:
[RegularExpression(@"^\d+(.\d{1,2})?$")]
Ответ 7
Аналогично mattytommo. Вам нужно бежать '.' - в противном случае будет принят ЛЮБЫЙ символ
[RegularExpression(@"^\d+(\.\d{1,2})?$")]