2011-09-08 6 views
6

asp.net mvc3クライアント側で邪魔にならない検証を行うために、jqueryグローバリゼーションプラグイン(https://github.com/jquery/globalize)を使用しようとしています。私はen-CAとfr-CAの両方の文化に縛られており、プラグインが有効な数として受け入れるものとサービス側の検証が受け入れていたものとの間にいくつかの相違が見られました。ここでは、2つの文化とどのような私は取得していますと異なる入力でGlobalize.parseFloatメソッドを呼び出すのいくつかの例である FR-CAをjquery parseFloatの検証で問題をグローバル化

  • Globalize.parseFloat(太字は番号を検証doesntのこと、サーバー側の検証を示しています) ( "7.12"、10、 "FR-CA")は7.12
  • Globalize.parseFloat( "7..12"、10、 "FR-CA")はNaNを
  • Globalize.parseFloat(7 "を返すを返します12、10、 "fr-CA")は、7.12を返します
  • Globalize.parseFloat( "7、12"、10、 "fr-CA")はNaNを返します
  • Globalize.parseFloat( "7 1 2,12"、10、 "FR-CA")712.12

EN-CA

  • Globalize.parseFloat( "7.12"、10返します、 "EN-CA")7.12
  • Globalize.parseFloatを返す( "7..12"、10、 "EN-CA")はNaNを
  • Globalize.parseFloat返す( "7,12"、10、「 en-CA ")は712を返す
  • Globalize.parseFloat(7 "12"、10、 "EN-CA")712
  • Globalize.parseFloat(7 "1、、2.12"、10、 "EN-CA")を返しますparseFloatはコードのステップ実行712.12

を返し、これは意図した出力であるように見えますが、私はこれがそのように私は私が何かをしないのです...か、これは意図されて期待していますことを意図しているかを確認カント? parseFloatは内部であるので

おかげ

答えて

1

グローバリゼーションプラグインの既知の問題です(https://github.com/jquery/globalize/issues/46を参照)。私は自分の正規表現を実行して、クライアント側の検証のための適切な形式であることを確認する必要があるように見えます(現時点では2つの言語しか扱えません)。

0

は、それがグローバル化によって包まれ、最初に実行されます。 parseFloatは実際に複雑な文字列を扱うようには設計されていません。

0

クライアント側のparseFloatメソッドは千個の区切り文字を無視するだけなので、Globalize.parseFloat( "7、1、2.12"、10、 "en-CA")は712.12を返しますこの文化は '、')。

fr-CAカルチャの千単位区切り記号はスペースです。このため、Globalize.parseFloat( "7 1 2,12"、10、 "fr-CA")は712.12を返します。

小数点は1回しか出現できません。 en-CAの場合、これは '。'で、fr-CAの場合は '、'です。したがって、複数の小数点を含むすべての例はNaNを返します。

説明できないのは、Globalize.parseFloat( "7.12"、10、 "fr-CA")が7.12を返す理由だけです。小数点と桁区切り記号のどちらも '。'ではないので、これは奇妙です。このカルチャでは、NaNが返されるはずです。