Range(decimal, decimal,...)
モデルの物件に応募しました。検証はしません.99
が、検証し0.99
ます。
先頭のゼロを許可するには?
Range(decimal, decimal,...)
モデルの物件に応募しました。検証はしません.99
が、検証し0.99
ます。
先頭のゼロを許可するには?
これは、デフォルトでASP.NETMVC3に付属している正規表現jquery.validate.js
とファイルの数のバグです。jquery.validate.min.js
jquery.validate.js
1048行目のコードは次のとおりです。
// http://docs.jquery.com/Plugins/Validation/Methods/number
number: function(value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
}
この関数は、数値正規表現に対して文字列のテストを実行します。これを修正するには、regexpを次の正規表現に置き換えます/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/
。
これは短いバージョンです。ここに説明があります:
バギー^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$
正規表現は次のようになります。
^-?
Beginning of line or string
-, zero or one repetitions
Match expression but don't capture it. [\d+|\d{1,3}(?:,\d{3})+]
Select from 2 alternatives
Any digit, one or more repetitions
\d{1,3}(?:,\d{3})+
Any digit, between 1 and 3 repetitions
Match expression but don't capture it. [,\d{3}], one or more repetitions
,\d{3}
,
Any digit, exactly 3 repetitions
Match expression but don't capture it. [\.\d+], zero or one repetitions
\.\d+
Literal .
Any digit, one or more repetitions
End of line or string
ご覧のとおり、2番目のキャプチャグループは形式(?:\.\d+)?
の数値を許可し.XX
ますが、一致する場合、最初のグループが最初にチェックされ、最初のグループが一致する必要(?:\d+|\d{1,3}(?:,\d{3})+)
があるため、検証は失敗します。
http://docs.jquery.com/Plugins/Validation/Methods/numberデモを参照し、番号の検証のために正規表現を調べると、次のようになります^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$
。これはバグのあるグループと同じですが、最初に一致するグループは、zero or one repetitions
つまりオプションである必要があります。そして、この?
regexpの追加により、バグが修正されます。
編集:これはMVC4のデフォルトテンプレートにも適用されます。どちらのテンプレートも1.9.0バージョンのプラグインを使用しています。バージョン1.10.0では、この問題は修正されました。変更ログから:
したがって、常に最新の状態を維持することをお勧めします。