如果我做:
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
我希望这就是您正在寻找的内容,并将很快解决您的问题。如果它不起作用,请告诉我。
不幸的是,您将不得不手动处理本地化。受到这个答案的启发,我创建了一个函数来手动替换印地语数字:
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/
使用全球化库。
安装它
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)); //₹३,५००.००
你可以试试这个
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('१२३४५६७८९', '印地语', '英语');
最近,我一直在努力解决将在任何语言环境中格式化的字符串化数字转换回数字的相同问题。
我受到了在 NG Prime InputNumber组件中实现的解决方案的启发。他们使用Intl.NumberFormat.prototype.format()
(我推荐)将值格式化为语言环境字符串,然后RegExp
根据简单示例创建一组表达式,以便他们可以从格式化的字符串中截取特定的表达式。
这个解决方案可以通过使用来简化Intl.Numberformat.prototype.formatToParts()
。此方法返回有关grouping/decimal/currency
用于在特定语言环境中格式化您的值的所有其他分隔符的信息,因此您可以轻松地将它们从先前格式化的字符串中清除。这似乎是最简单的解决方案,它将涵盖所有情况,但您必须知道该值先前已在何种语言环境中格式化。
为什么 Ng Prime 没有走这条路?我认为是因为Intl.Numberformat.prototype.formatToParts()
不支持 IE11,或者可能还有其他我没有注意到的地方。