私はビューモデルにこれを持っています:
[Required(ErrorMessage = "Price is required")]
[Range(0.01, 999999999, ErrorMessage = "Price must be greater than 0.00")]
[DisplayName("Price ($)")]
public decimal Price { get; set; }
ユーザーが小数点以下2桁を超えて入力しないことを検証したいと思います。だから私は持ってみたい
有効な値:12、12.3、12.34
無効な値:12.、12.345
これをデータ注釈で検証する方法はありますか?
条件に一致する正規表現でRegularExpression属性を使用できます。ここには数字が関係する表現がたくさんありますが、私はその1つが法案に適合すると確信しています。 リンク です。
これはあなたが始めるようになりますが、あなたが望むほど包括的ではないかもしれません(小数点の前に少なくとも1桁の数字が必要です):
[RegularExpression(@"\d+(\.\d{1,2})?", ErrorMessage = "Invalid price")]
正規表現のどの部分が一致しなかったかわからないため、正確なエラーメッセージを出力するのは難しいことに注意してください(たとえば、文字列 "z.22"の小数点以下の桁数は正しいですが、有効な価格ではありません) )。
[RegularExpression(@"^\d+.\d{0,2}$",ErrorMessage = "Price can't have more than 2 decimal places")]
public decimal Price { get; set; }
これは、小数点以下0〜2桁に対応するか、まったくありません。
RegularExpressionAttribute から継承して、独自のDecimal検証属性を作成することもできます。
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));
[RegularExpression(@"^\d+(\.\d)?$", ErrorMessage = "It cannot have more than one decimal point value")]
[Range( 0.1,100)]
public double xyz{get;set;}
それは私のために1つの小数まで機能します
正規表現を使用してこの検証を行い、RegularExpression属性で適用できます。
私はOPと同じシナリオを持っていましたが、提供された答えは、次のすべてのケースで機能するソリューションを提供しません:
12, 12.3 and 12.34
そのためには、次の正規表現を使用します。
[RegularExpression(@"^\d+(.\d{1,2})?$")]
mattytommoと同様です。 「。」をエスケープする必要があります-それ以外の場合は、任意の文字が受け入れられます
[RegularExpression(@"^\d+(\.\d{1,2})?$")]