如何通过Locale验证货币价值?

时间:2016-08-11 06:31:51

标签: javascript currency

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

是否存在可以通过区域设置验证货币价值的解决方案?

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

并且在后端你需要获得两个值。用户输入的值和选择的当前值。

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

答案 2 :(得分:0)

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

我强烈建议您使用Globalize设置本地化。正确设置后,您所要做的就是更改用户的locale,并且所有依赖于语言环境的格式(例如货币,日期,数量,单位等)都会自行修复。

如果您只想将其用于货币,请参阅其货币模块:Globalize Currency Module

答案 3 :(得分:0)

我现在通过自己的功能实现了它:

/*
* 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);
    }

}

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