正则表达式生成类似货币的格式

时间:2015-03-16 22:07:59

标签: javascript regex

我需要生成类似货币的货币:

示例:

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]/, '')

赞赏任何想法/建议

2 个答案:

答案 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;
&#13;
&#13;

答案 1 :(得分:0)

这是一个带正则表达式(如果你坚持)匹配任何数字的解决方案,可以跟一个点。

&#13;
&#13;
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;
&#13;
&#13;