2011-09-08 73 views
6

我想使用jQuery的全球化插件(https://github.com/jquery/globalize)與asp.net mvc3客戶端不顯眼的驗證工作。我將en-CA和fr-CA文化聯繫在一起,並且發現插件接受的有效數字與服務端驗證接受的內容有一些差異。這裏是調用Globalize.parseFloat方法與不同的輸入與兩種文化,什麼我得到了一些例子(粗體表示服務器端驗證犯規驗證號碼) FR-CAjquery全球化問題與parseFloat驗證

  • Globalize.parseFloat ( 「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

烯CA

  • Globalize.parseFloat( 「7.12」,10中, 「En-CA」)返回7.12
  • Globalize.parseFloat( 「7..12」,10, 「烯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, 「烯CA」)返回712.12

步進通過parseFloat代碼看起來這是預期的輸出,但我不能看到這是如何打算,所以我希望我失去了一些東西......或者這是故意的嗎?

由於

回答

1

看起來像這是全球化插件中的一個已知問題(請參閱https://github.com/jquery/globalize/issues/46)。看起來我將不得不運行自己的正則表達式來確保客戶端驗證的格式正確(我現在只需要處理兩種語言的好東西:)

0

由於parseFloat是裏面,它運行第一,通過Globalize的包裹。 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。

小數點只能出現一次。對於en-CA,這是'。',對於fr-CA,這是','。因此,包含多個小數點的所有示例都將返回NaN。

我唯一不能解釋的是爲什麼Globalize.parseFloat(「7.12」,10,「fr-CA」)返回7.12。這很奇怪,因爲小數點和千位分隔符都不是'。'在這種文化中,所以這應該返回NaN。