【问题标题】:jquery globalize issues with parseFloat validationjquery 使用 parseFloat 验证全球化问题
【发布时间】:2011-09-08 20:47:52
【问题描述】:

我正在尝试使用 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

zh-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 代码看起来像是预期的输出,但我看不出这是如何预期的,所以我希望我遗漏了一些东西......或者这是预期的吗?

谢谢

【问题讨论】:

    标签: jquery asp.net-mvc validation globalization


    【解决方案1】:

    看起来这是全球化插件中的一个已知问题(请参阅https://github.com/jquery/globalize/issues/46)。看起来我必须运行我自己的正则表达式以确保它的格式正确以进行客户端验证(好在我现在只需要处理两种语言:)

    【讨论】:

      【解决方案2】:

      由于 parseFloat 在里面,它首先运行,由 Globalize 包裹。 parseFloat 并不是真正为处理复杂字符串而设计的。

      【讨论】:

        【解决方案3】:

        客户端的 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。

        【讨论】:

          猜你喜欢
          • 2018-10-27
          • 1970-01-01
          • 2019-07-22
          • 1970-01-01
          • 1970-01-01
          • 2011-08-01
          • 1970-01-01
          • 2013-07-31
          • 1970-01-01
          相关资源
          最近更新 更多