wilson's story

천단위 콤마~ 본문

Javascript

천단위 콤마~

wilson 2008. 11. 17. 14:37
반응형
function commify(n) {
  var reg = /(^[+-]?\d+)(\d{3})/;   // 정규식
  n += '';                          // 숫자를 문자열로 변환

  while (reg.test(n))
    n = n.replace(reg, '$1' + ',' + '$2');

  return n;
}


사용법 -
var s = commify(-1234567890.123);
document.write(s );
// 출력 결과: -1,234,567,890.123



정규식 설명:

숫자의 끝부분부터 매치시키며, 루프 속에서 숫자의 좌측으로 즉 앞쪽으로 이동합니다.

이미 쉼표화가 된 부분이나, 소수부는 (^[+-]?\d+)(\d{3}) 이런 정규식으로 매치되지 않기에, 점점 앞쪽으로 이동하게 됩니다.

$1 은 앞쪽 소괄호가 매치되는 내용
$2 는 뒤쪽 소괄호가 매치되는 내용이기에 그 사이에 쉼표(,)를 넣어주고 치환합니다.


그리고
while (reg.test(n))
이 부분은 정규식이 매치되는 동안 계속 루프를 돌리라는 뜻입니다. test() 메소드(METHOD; 함수)는, 문자열 안에서 정규식(Pattern)이 매치되는지 아닌지 테스트합니다. 매치되면 true, 아니면 false 를 반환합니다.



자바스크립트로 숫자 천단위마다 쉼표를 넣는 소스는 많이 있는데, 소수점이나 플러스/마이너스 부호를 처리하지 못하는 문제가 있어서, 실제 사용에는 무리가 있었습니다. 그래서 위와 같은 함수를 만들어 보았습니다.

반응형