2011-08-04 12 views
0

一つは、ユーザが、大手小数点で値を入力したときに、このフィールドの検証が失敗したMVC3データ注釈正規表現のバリデータ属性失敗

[Display(Name="Gram Weight")] 
    [RegularExpression(@"[0-9]*\.?[0-9]+", ErrorMessage = "Gram Weight must be a Number.")] 
    [Range(0, 9999.99, ErrorMessage = "Value must be between 0 - 9,999.99")] 
    public decimal? GramWeight { get; set; } 

として定義され、財産、GramWeightを持っています0.23ではなく23である。ユーザーが0を前面に追加すると、検証にパスします。私はこれが私の正規表現の問題だと思っていましたが、私はこのhttp://regexhero.net/tester/でいくつかのテストを実行しましたが、うまくいくようです。

正規表現ではない場合、それ以外のものはありますか?私はそうすることに失敗した場合、ユーザーのために0を追加するためにJavaScriptを使用する準備ができています。それは私の最後のリゾートオプションのようなものですが、私はそれを考慮しています。

答えて

2

これは10進数型なので、GramWeightを文字列に変更しようとしましたが、その場合にバリデーターが何をするのか見てみましたか?ここではよりよい解決策を必要とする人のために

+0

私はそれを撃つでしょう。 –

+0

OK、プロパティの種類を文字列に変更した後に動作するようです。それは問題を説明していますが、私はすべての小数フィールドを文字列として表現しているモデルのアイデアが気に入らないと思います。ビューのために素晴らしい、私は思うが、どこにもない。私のモデルはしばしばドメインオブジェクトとして機能するので、これは本当に吹き飛びます。しかし、ソリューションをありがとう。 –

+0

小数点で始まる場合は、javascriptのような音がプレフィックスとしてゼロのために呼び出されることがあります。あなたはまた、クライアント側の検証/入力フィルタリングを使用していますか? –

0

10進数を検証するために、適切な正規表現です:

[RegularExpression(@"[-+]?[0-9]*\.?[0-9]?[0-9]")] 

この正規表現は、ドット記号の前に番号(お使いの場合はゼロ)を必要とし、最大2小数を可能にします。

+0

大文字小文字を0にすることを許可したいと思いました。そして、多くの場合小数点以下1桁が必要です。 .00125は共通の値です。 –