如果我这样做:
var number = 3500;
alert(number.toLocaleString("hi-IN"));
我会获得印地语中的३,५००
。
但是我该如何将它转换回3500
呢?
我想要这样的结果:
var str='३,५००';
alert(str.toLocaleNumber("en-US"));
所以,它可以给出3500
。
用JavaScript或jQuery是否可能?
如果我这样做:
var number = 3500;
alert(number.toLocaleString("hi-IN"));
我会获得印地语中的३,५००
。
但是我该如何将它转换回3500
呢?
我想要这样的结果:
var str='३,५००';
alert(str.toLocaleNumber("en-US"));
所以,它可以给出3500
。
用JavaScript或jQuery是否可能?
我认为你正在寻找类似这样的东西:
https://github.com/jquery/globalize
上面的链接将带您进入git项目页面。这是由微软贡献的js库。您应该尝试使用该插件的formt方法,并进行一次尝试。如果您想学习此插件,这里是相应的链接:
http://weblogs.asp.net/scottgu/jquery-globalization-plugin-from-microsoft
我希望这是您正在寻找的,并且能尽快解决您的问题。如果不起作用,请告诉我。使用Globalize库。
安装它
npm install globalize cldr-data --save
然后
var cldr = require("cldr-data");
var Globalize = require("globalize");
Globalize.load(cldr("supplemental/likelySubtags"));
Globalize.load(cldr("supplemental/numberingSystems"));
Globalize.load(cldr("supplemental/currencyData"));
//replace 'hi' with appropriate language tag
Globalize.load(cldr("main/hi/numbers"));
Globalize.load(cldr("main/hi/currencies"));
//You may replace the above locale-specific loads with the following line,
// which will load every type of CLDR language data for every available locale
// and may consume several hundred megs of memory!
//Use with caution.
//Globalize.load(cldr.all());
//Set the locale
//We use the extention u-nu-native to indicate that Devanagari and
// not Latin numerals should be used.
// '-u' means extension
// '-nu' means number
// '-native' means use native script
//Without -u-nu-native this example will not work
//See
// https://en.wikipedia.org/wiki/IETF_language_tag#Extension_U_.28Unicode_Locale.29
// for more details on the U language code extension
var hindiGlobalizer = Globalize('hi-IN-u-nu-native');
var parseHindiNumber = hindiGlobalizer.numberParser();
var formatHindiNumber = hindiGlobalizer.numberFormatter();
var formatRupeeCurrency = hindiGlobalizer.currencyFormatter("INR");
console.log(parseHindiNumber('३,५००')); //3500
console.log(formatHindiNumber(3500)); //३,५००
console.log(formatRupeeCurrency(3500)); //₹३,५००.००
最近,我一直在苦恼如何将以任何语言环境格式化的字符串数字转换回数字。
我受到了 NG Prime InputNumber 组件实现的启发。他们使用了 Intl.NumberFormat.prototype.format()
(我推荐使用)将值格式化为区域字符串,并基于简单示例创建了一组 RegExp
表达式,以便从格式化的字符串中分离出特定表达式。
使用 Intl.Numberformat.prototype.formatToParts()
可以简化此解决方案。该方法返回关于用于特定区域设置中格式化您的值所使用的所有分组/小数点/货币和其他分隔符的信息,因此您可以轻松地清除它们以前格式化的字符串。它似乎是最简单的解决方案,可涵盖所有情况,但是您必须知道先前格式化该值的区域设置。
为什么 Ng Prime 没有采用这种方式呢?我认为这是因为 Intl.Numberformat.prototype.formatToParts()
不支持 IE11,或者可能还有其他我没有注意到的原因。
使用此解决方案的完整代码示例可以在 此处 找到。
很遗憾,您必须手动处理本地化。受this answer的启发,我创建了一个函数,将手动替换印度数字:
function parseHindi(str) {
return Number(str.replace(/[०१२३४५६७८९]/g, function (d) {
return d.charCodeAt(0) - 2406;
}).replace(/[०१२३४५६७८९]/g, function (d) {
return d.charCodeAt(0) - 2415;
}));
}
alert(parseHindi("३५००"));
在这里查看代码示例: http://jsfiddle.net/yyxgxav4/
var number = 3500;
div.innerHTML = number.toLocaleString("hi-IN");
div.dataset.value = number;
然后通过解析数据属性将其取回:
var number = parseFloat(div.dataset.value);
这是哥伦布蛋式的答案。只要问题是一个蛋,它就能起作用。
你可以试一下
function ConvertDigits(input, source, target) {
var systems = {
arabic: 48, english: 48, tamil: 3046, kannada: 3302, telugu: 3174, hindi: 2406,
malayalam: 3430, oriya: 2918, gurmukhi: 2662, nagari: 2534, gujarati: 2790,
},
output = [], offset = 0, zero = 0, nine = 0, char = 0;
source = source.toLowerCase();
target = target.toLowerCase();
if (!(source in systems && target in systems) || input == null || typeof input == "undefined" || typeof input == "object") {
return input;
}
input = input.toString();
offset = systems[target] - systems[source];
zero = systems[source];
nine = systems[source] + 9;
for (var i = 0 ; i < input.length; i++) {
var char = input.charCodeAt(i);
if (char >= zero && char <= nine) {
output.push(String.fromCharCode(char + offset));
} else {
output.push(input[i]);
}
}
return output.join("");
}
var res = ConvertDigits('१२३४५६७८९', 'hindi', 'english');
toLocaleString
的结果中比不同数字字符更常见。 - hippietrailvar number = 3500;
var toLocaleString = number.toLocaleString("hi-IN")
var formatted = toLocaleString.replace(',','')
var converted = parseInt(formatted)
parseIntFromLocale
这样的函数。有很多数字格式化和解析库可供选择,我相信其中一个一定支持印地语。我认为JavaScript本身没有这方面的本地化支持。 - Matt Burlandin
区域设置(但我从未尝试过)。它可以让你做像这样的事情:$.parseNumber(str, {format:"#,###", locale:"in"});
- Matt Burland