【问题标题】:How to validate currency value by Locale?如何通过语言环境验证货币价值?
【发布时间】:2016-08-11 06:31:50
【问题描述】:

我们有一个大型网络应用程序,在不同国家/地区都有门户。 在这些国家/地区,货币价值的插入方式不同。

是否存在可以按地区验证货币价值的解决方案?

【问题讨论】:

  • 我的问题似乎没有被理解,或者我不明白答案。我的问题是例如:德国门户网站中的用户输入:1.234,98 所以我想验证他的插入是否正确 - 在这个例子中是正确的。但是,如果用户在德国门户中插入值:1,234.98,那么它是不正确的,但在美国门户中它是正确的。

标签: javascript currency


【解决方案1】:

我会推荐http://openexchangerates.github.io/money.js/,这将为您提供实时货币兑换率。

出于格式化目的,请查看 AccountingJs https://josscrowcroft.github.io/accounting.js/

【讨论】:

  • 如何验证给定值在特定语言环境中是否是正确的货币值?
  • 您可以将其转换为特定的语言环境格式,而不是验证,这样您将始终获得正确的值。
  • 这是不可能的,因为需要验证 - 用户需要插入正确的值格式,因为它将通过 Java 进行转换。
  • 在这种情况下,您可以只询问用户价格,然后将其转换为适当的语言环境,然后再将其发送到 java
【解决方案2】:

您可以在货币文本框旁边提供一个下拉菜单。因此用户可以选择合适的货币并填写该值。

在后端,您需要同时获得这两个值。用户输入的值和选择的货币。

您可以根据位置更改默认选择的货币。

【讨论】:

  • 这里的问题不是货币的类型。它是输入数值的格式。 “在这些国家,货币价值的插入方式不同”。就像为不同的文化写 2.002,00
  • 使用正则表达式将逗号转换为点。而不是将其用于进一步处理。或者只是使用javascript替换 - str.replace(",", ".");
  • 关键是,当您在一个巨大的网络应用程序上处理多种文化时,这种手动处理变得难以管理。您需要引入一个系统来管理不同文化带来的所有差异。那2.00 | 2,00 示例只是冰山一角。即使在相对较小的应用程序中,这也很容易出错且难以管理。
【解决方案3】:

“我们有一个大型网络应用程序,在不同国家/地区都有门户”

我强烈建议使用Globalize 设置本地化。正确设置后,您所要做的就是更改用户的locale,并且所有与区域设置相关的格式(例如货币、日期、数字、单位等)都会自行修复。

如果您只想将其用于货币,请查看他们的货币模块:Globalize Currency Module

【讨论】:

  • 如何验证给定值在特定语言环境中是否是正确的货币值?
【解决方案4】:

我现在通过自己的函数实现了它:

/*
* checks if a given money value is a correct one via locale language
* */
function isMoney(moneyValue) {
    var currentSelectedLanguage = $('#currentSelectedLanguage').val();
    switch (currentSelectedLanguage)
    {
        // checks for , as separator and . as decimal separator e.g.: 1,234,567,890.98 - also allows without , as separator e.g.: 1234567890.98
    case "en":
        return /(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|[0-9]+)?(\.[0-9]{1,2})?$/.test(moneyValue);
        break;

    // checks for . as separator and , as decimal separator e.g.: 1.234.567.890,98 - also allows without . as separator e.g.: 1234567890,98
    case "de":
    case "el":
    case "es":
    case "hr":
    case "ro":
    case "sl":
    case "sr":
        return /(?=.)^\$?(([1-9][0-9]{0,2}(\.[0-9]{3})*)|[0-9]+)?(,[0-9]{1,2})?$/.test(moneyValue);
        break;

    // checks for space as separator and , as decimal separator e.g.: 1 234 567 890,98, also allows without space as separator e.g.: 1234567890,98
    case "bg":
    case "cs":
    case "hu":
    case "pl":
    case "ru":
    case "sk":
    case "uk":
        return /(?=.)^\$?(([1-9][0-9]{0,2}( [0-9]{3})*)|[0-9]+)?(,[0-9]{1,2})?$/.test(moneyValue);
        break;

    // checks for . as separator and , as decimal separator e.g.: 1.234.567.890,98 - also allows without . as separator e.g.: 1234567890,98
    default:
        return /(?=.)^\$?(([1-9][0-9]{0,2}(\.[0-9]{3})*)|[0-9]+)?(,[0-9]{1,2})?$/.test(moneyValue);
    }

}

唯一的缺点是,如果我们的应用程序中有新的语言环境,我必须自己扩展它

【讨论】:

    猜你喜欢
    • 2014-12-22
    • 2012-09-23
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多