2011-09-08 5 views
6

Sto provando a utilizzare il plugin di globalizzazione jquery (https://github.com/jquery/globalize) per funzionare con convalida discreta lato client di asp.net mvc3. Ho legato sia le culture en-CA e fr-CA e stavo vedendo alcune discrepanze tra ciò che il plugin accettava come numero valido rispetto a quello che la convalida del lato servizio stava accettando. Ecco alcuni esempi di una chiamata al metodo Globalize.parseFloat con ingressi diversi con le due culture e ciò che io sono sempre fuori (in grassetto indica che la validazione lato server pretende molto convalidare il numero) fr-CAjquery globalizza i problemi con la convalida parse Float

  • Globalize.parseFloat ("7.12", 10, "fr-CA") restituisce 7.12
  • Globalize.parseFloat ("7..12", 10, "fr-CA") restituisce NaN
  • Globalize.parseFloat ("7, 12 ", 10," fr-CA ") restituisce 7.12
  • Globalize.parseFloat (" 7,, 12 ", 10," fr-CA ") restituisce NaN
  • Globalize.parseFloat ("7 1 2,12", 10, "fr-CA") restituisce 712,12

en-CA

  • Globalize.parseFloat ("7.12", 10 , "en-CA") restituisce 7.12
  • Globalize.parseFloat ("7..12", 10 "en-CA") restituisce NaN
  • Globalize.parseFloat ("7,12", 10 " en-CA ") restituisce 712
  • Globalize.parseFloat ("7, 12", 10 "en-CA") restituisce 712
  • Globalize.parseFloat ("7,, 1,, 2.12", 10 "en-CA") Restituisce 712,12

Facendo un passo attraverso il codice parseFloat assomiglia a questo è l'output desiderato, ma non posso vedere come questo è destinato quindi spero che mi manca qualcosa ... o è questo destinato?

Grazie

risposta

1

Sembra che questo sia un problema noto nel plug-in di globalizzazione (vedere https://github.com/jquery/globalize/issues/46).Sembra che dovrò eseguire la mia espressione regolare per assicurarmi che sia nel formato giusto per la convalida del lato client (buona cosa ho solo a che fare con due lingue al momento :)

0

Da parseFloat è all'interno, viene eseguito prima, avvolto da Globalize. parseFloat non è realmente progettato per gestire stringhe complesse.

0

Il metodo parseFloat sul lato client ignora semplicemente i mille separatori, quindi questo è il motivo per cui Globalize.parseFloat ("7,, 1,, 12", 10, "en-CA") restituisce 712,12 (il separatore delle migliaia in questa cultura è un ',').

Il separatore delle migliaia per la cultura fr-CA è uno spazio, ecco perché Globalize.parseFloat ("7 1 2,12", 10, "fr-CA") restituisce 712,12.

Il punto decimale può essere visualizzato solo una volta. Per en-CA questo è un '.', Per fr-CA questo è un ','. Quindi tutti gli esempi contenenti più di un punto decimale restituiranno NaN.

L'unica cosa che non posso spiegare è perché Globalize.parseFloat ("7.12", 10, "fr-CA") restituisce 7.12. Questo è strano perché né il punto decimale né il separatore delle migliaia è un '.' in questa cultura, quindi questo dovrebbe restituire NaN.