我需要生成类似货币的货币:
示例:
123 -> 123
123.0 -> 123
1234 -> 1,234
1234.00 -> 1,234
12345 -> 12,345
12345.0012 -> 12,345
123456 -> 123,456
123456.02 -> 123,456 and so on..
基本上它应该修剪后的所有内容。包括 。并格式化数字的其余部分。
到目前为止我有这个限制用户只输入数字。
num.replace(/[^0-9]/, '')
赞赏任何想法/建议
答案 0 :(得分:2)
只需使用Number.prototype.toLocaleString()
:
> new Number(1234.00).toLocaleString()
1,234
要将小数位数限制为0,您也可以使用Number.prototype.toFixed()
:
> new Number((12345.0012).toFixed(0)).toLocaleString()
12,345
0
是.toFixed()
的默认参数,因此如果您愿意,可以省略。
这是一个带有工作示例的片段:
function convert() {
var num = new Number(document.getElementById("number").value);
var fixed = new Number(num.toFixed());
var locale = fixed.toLocaleString();
alert(locale);
}

<input placeholder="enter number" id="number" />
<button onclick="convert()">convert</button>
&#13;
答案 1 :(得分:0)
这是一个带正则表达式(如果你坚持)匹配任何数字的解决方案,可以跟一个点。
var nums = ['123', '123.0', '1234', '1234.00', '12345.0012', '123456', '123456.02']
var regex = /^(\d+)(?=[\.]?)/
nums.forEach(function(number) {
var match = number.match(regex)[1];
var fixed = fixComma(match);
$('#result').append(number + ' was fixed to ' + fixed + '<br/>')
});
function fixComma(match) {
var GROUP_LEN = 3;
var len = match.length;
if (len > GROUP_LEN) {
var times = parseInt(len / GROUP_LEN);
var remider = len % GROUP_LEN;
var index = (remider > 0) ? len - (times*GROUP_LEN) : GROUP_LEN;
return match.substring(0, index) + ',' + fixComma(match.substring(index))
}
else {
return match
}
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='result' />
&#13;