如何根据区域设置将字符串转换为数字(与.toLocaleString相反)
How do I convert String to Number according to locale (opposite of .toLocaleString)?
如果我这样做:
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
我希望这就是你想要的,并将很快解决你的问题。如果不起作用,请告诉我。
最近,我一直在努力解决将在任何语言环境中格式化的字符串化数字转换回数字的同样问题。
NG Prime InputNumber组件中实现的解决方案给了我灵感。他们使用Intl.NumberFormat.prototype.format()
(我建议使用)将值格式化为区域设置字符串,然后基于简单示例创建一组RegExp
表达式,这样他们就可以从格式化的字符串中剪切出特定的表达式。
使用Intl.Numberformat.prototype.formatToParts()
可以简化此解决方案。此方法返回有关grouping/decimal/currency
和用于在特定区域设置中格式化值的所有其他分隔符的信息,因此您可以轻松地从以前格式化的字符串中清除它们。这似乎是最简单的解决方案,它将涵盖所有情况,但您必须知道该值以前是在什么区域设置中格式化的。
吴为什么不走这条路?我想这是因为Intl.Numberformat.prototype.formatToParts()
不支持IE11,或者可能还有其他我没有注意到的东西。
使用此解决方案的完整代码示例可以在此处找到。
不幸的是,您将不得不手动处理本地化问题。受这个答案的启发,我创建了一个功能,可以手动替换印地语数字:
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("३५००"));
Fiddle here:http://jsfiddle.net/yyxgxav4/
使用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)); //₹३,५००.००
https://github.com/codebling/globalize-example
您可以试用
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('१२३४५६७८९', '印地语、英语);
我从这里得到的如果你需要一个jquery的东西,那么请尝试这个链接
var number = 3500;
var toLocaleString = number.toLocaleString("hi-IN")
var formatted = toLocaleString.replace(',','')
var converted = parseInt(formatted)
这个问题的常见场景是向用户显示一个浮点数,然后将其作为数值返回。
在这种情况下,javascript将数字放在第一位,并在格式化显示时将其丢失。解析的一个简单解决方法是将实际浮点值与格式化值一起存储:
var number = 3500;
div.innerHTML = number.toLocaleString("hi-IN");
div.dataset.value = number;
然后通过解析数据属性将其取回:
var number = parseFloat(div.dataset.value);
这是哥伦布的蛋式回答。只要问题是一个鸡蛋,它就会起作用。
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 测试索引值是否等于某个数字的倍数
- 将数字转换为一定数量的硬币
- 键入最后一位数字后自动提交
- 如何在javascript中迭代数字列表
- Javascript逻辑运算符和字符串/数字
- 如何在javascript中获得与特定数字相等的随机数
- 如果元素's的ID以数字开头
- 递增一个数字而不去掉前导零
- 如何使用JavaScript查找1和N之间的所有数字的总和
- 如何在这里将两个值最低的数字相加
- 如何删除除冒号、数字和'上午'或者'下午'
- 如何为jQuery屏蔽输入插件创建一个允许字母数字、空格和重音字符的掩码
- Javascript排序字符串或数字
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 将数字四舍五入到小数点后两位
- 我如何在数字插入中使用逗号,这样它就不会'不要破坏我的输入字段
- 正则表达式与数字中的第二个点匹配
- 制作一个regex来验证只有一个数字的字符串
- 分开的数字和字母