2011-09-08 11 views
6

Próbuję użyć wtyczki globalizacji jquery (https://github.com/jquery/globalize) do pracy z niezobowiązującą walidacją asp.net mvc3 klienta. Związałem się zarówno z kulturami en-CA, jak i fr-CA, i widziałem pewne rozbieżności między tym, co wtyczka akceptuje jako prawidłową liczbę a tym, co akceptowała strona zatwierdzająca. Oto kilka przykładów wywołanie metody Globalize.parseFloat z różnymi wejściami z dwóch kultur i co ja wychodzi (pogrubienie oznacza, że ​​walidacja po stronie serwera robi zweryfikować numer) fr-CAjquery globalizować problemy z walidacją parseFloat

  • Globalize.parseFloat ("7,12", 10 "fr-CA") zwraca 7,12
  • Globalize.parseFloat ("7..12", 10 "fr-CA") zwraca NaN
  • Globalize.parseFloat ("7, 12 ", 10," fr-CA ") zwraca 7.12
  • Globalize.parseFloat (" 7,, 12 ", 10," fr-CA ") zwraca wartość NaN
  • Globalize.parseFloat ("7 1 2,12", 10 "fr-CA") zwraca 712,12

en CA

  • Globalize.parseFloat ("7,12" 10 "en CA") zwraca 7,12
  • Globalize.parseFloat ("7..12", 10 "en ca") zwraca NaN
  • Globalize.parseFloat ("7,12", 10 " en-CA ") zwraca 712
  • Globalize.parseFloat ("7, 12", 10 "en-CA") zwraca 712
  • Globalize.parseFloat ("7,, 1,, 2,12", 10 "en ca") zwraca 712,12

Stepping poprzez kod parseFloat wygląda to wyjście przeznaczone, ale nie mogę zobaczyć, jak to ma więc mam nadzieję, że mi czegoś brakuje ... czy jest to zamierzone?

Dzięki

Odpowiedz

1

Wygląda na to, że jest to znany problem w wtyczce do globalizacji (patrz https://github.com/jquery/globalize/issues/46).Wygląda na to, że będę musiał uruchomić moje własne wyrażenie regularne, aby upewnić się, że jest w odpowiednim formacie do sprawdzania poprawności strony klienta (dobrze, że mam do czynienia tylko z dwoma językami w tej chwili :)

0

Od parseFloat jest w środku, to biegnie najpierw owinięty przez globalizację. ParseFloat nie jest tak naprawdę zaprojektowany do obsługi złożonych łańcuchów.

0

Metoda parseFloat po stronie klienta ignoruje tylko tysiące separatorów, dlatego funkcja Globalize.parseFloat ("7,, 1,, 2.12", 10, "en-CA") zwraca wartość 712.12 (tysiąc separatorów w ta kultura to ",").

Tysiąc separatora dla kultury fr-CA jest przestrzenią, dlatego Globalize.parseFloat ("7 1 2,12", 10, "fr-CA") zwraca wartość 712.12.

Punkt dziesiętny może wystąpić tylko raz. Dla en-CA jest to ".", Dla fr-CA jest to ",". Tak więc wszystkie przykłady zawierające więcej niż jeden przecinek zwrócą wartość NaN.

Jedyne, czego nie mogę wyjaśnić, to to, dlaczego Globalize.parseFloat ("7.12", 10, "fr-CA") zwraca 7.12. Jest to dziwne, ponieważ ani separator dziesiętny, ani separator tysięcy nie jest "." w tej kulturze, więc to powinno zwrócić NaN.

Powiązane problemy