-
-
Save jdsharp/852326 to your computer and use it in GitHub Desktop.
// via @DmitryBaranovsk | |
function dirtyCommas(num) { | |
return String(num).replace(/^\d+(?=\.|$)/, function (int) { return int.replace(/(?=(?:\d{3})+$)(?!^)/g, ","); }); | |
} |
@jdalton Also it will choke on this:
"hiya -1000.45 and 100 faz, 200foos and 253423 bars."
Fix:
String(value).replace(/(?=(?:\d{3})+\b)(?!\b)/g, ",");
Ya but still has a problem with the long decimal values.... I think a solution is close :D
@jdalton I think it even further now. Anyway I give up to solve it with one regexp. :)
Current solution is “good enough”.
ok so the thing I could come up with is:
String(value).replace(/(\.\d+)|(?=(?:\d{3})+\b)(?!\b)/g, function(m, $1) { return $1 || ',' });
It requires passing a function but still just 1 regexp.
I just applied jdalton's 2011.03.04 version to something I'm working on and found that I'll need a way to make it skip over dates. Example confusion: "...vol. 1, no. 4, pp. 4-9, July/August 1,995, concluded that..." (should contain "August 1995", rather than implying the nonsensical "July through August 1st, 995"). Guess I have my work cut out for me.
I've been trying several versions of this and it works great with numbers that are not thousand rounded.
for instance, 1234 goes 1,234.00.
But when I have 4000, I get a 4,0.00, so it basically removes 3 zeros off the thousands portion.
Does anyone have a clue?
@jdalton Not that easy, try this:
`"hiya -1000.123123123 and 100 faz, 200foos and 2534230 bars."
Anyway solving it with one regexp is academical task, not very practical. Seems to be some monstrous regexp… or really smart one.