Проблемы глобализации jquery с проверкой parseFloat - PullRequest
6 голосов
/ 09 сентября 2011

Я пытаюсь использовать плагин глобализации jquery (https://github.com/jquery/globalize) для работы с ненавязчивой проверкой на стороне клиента asp.net mvc3. Я связал культуры как en-CA, так и fr-CA и обнаружил некоторые расхождения между тем, чтоплагин, принимающий как действительный номер, по сравнению с тем, что принимала валидация на стороне службы. Вот несколько примеров вызова метода Globalize.parseFloat с разными входами с двумя культурами и тем, что я получаю (жирный шрифт указывает, что проверка на стороне сервера не проверяет число) fr-CA

  • 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

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») возвращает 712.12

Пошаговое выполнение кода parseFloat выглядит так, как будто это предполагаемый вывод, но яне могу понять, как это задумано, поэтому я надеюсь, что я что-то упустил ... или это задумано?

Спасибо

Ответы [ 3 ]

1 голос
/ 09 сентября 2011

Похоже, что это известная проблема в подключаемом модуле глобализации (см. https://github.com/jquery/globalize/issues/46). Похоже, мне придется запустить собственное регулярное выражение, чтобы убедиться, что оно в правильном формате для проверки на стороне клиента (хорошо, я только приходится иметь дело с двумя языками на данный момент:)

0 голосов
/ 09 сентября 2011

Метод 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.

0 голосов
/ 09 сентября 2011

Поскольку parseFloat находится внутри, он запускается первым, обернутый Globalize.ParseFloat не предназначен для работы со сложными строками.

...