YesYo.com MintState Forums
뒤로    YesYo.com MintState BBS > Tech > Javascript
검색
멤버이름    오토
비밀번호 
 

자바스크립트 한글 금액 찍기

페이지 정보

작성자 MintState 댓글 0건 조회 8,053회 작성일 17-11-02 09:43

본문

자바스크립트 한글 금액 찍기

정규식을 이용한 방법
//숫자를 한글로 바꾸어 반환
function getKorNameMoney(amount) {
  // 공백을 찾는다.
  // 해석을 하면 "/" 정규식을 시작한다. "^" 해당 받은 문자를 시작한다. 
  // "\s" 공백을 "$" 해당 줄의 끝에서부터 찾아라. "/" 여기까지가 정규식이다.
  // 정규식.test(정규식체크할변수) 로 공백이 있으면 이 로직을 탄다.
  if(/^\s*$/.test(amount))
    return "";
 
  // 헉 또 정규식이... 자 또 해석을 해 보자.
  // "/" 정규식 시작하고 "^" 첫 라인부터 "0" 숫자가 0이 "*" 여러개 존재 "|"(Or이죠)하거나
  // ","를 "*" 여러개 있다면 replace로 "" 으로 치환하라는거죠.
  // "/" 정규식 닫은 곳에 i와 g는 i는 대소문자를 무시하라는 거죠. 
  // g는 패턴에 맞는 모든 문자를 찾아라는 거죠.
  amount = amount.replace(/^0*|,*/ig,"");
  var korNumName = ["","일","이","삼","사","오","육","칠","팔","구"];
  var unit = ["","십","백","천"];
  var gunit = [
                ["","^[1-4]$",1],
                ["만","^[5-8]$",5],
                ["억","^9|1[0-2]$",9],
                ["조","^1[3-6]$",13],
                ["경","^1[7-9]|20$", 17],
                ["해","^2[1-4]$", 21],
                ["자","^2[5-8]$", 25]
              ];

  var res = "";      // 리턴값 정의
  var tmp = "";     // 임시로 숫자 단위별로 저장할 변수
  var mxlen = amount.length;
  var rexp = null;  // 해당 정규식을 저장한다.
  var cpos = 0;
 
  for(var i=0; i < mxlen ; i++){
    cpos = mxlen - i;
    tmp = korNumName[parseInt(amount.charAt(i))];
 
    if (tmp != "")
    {
       for(var j=0; j < gunit.length; j++){
           rexp = new RegExp(gunit[j][1]);
 
           if(rexp.test(cpos)){
               tmp += unit[(cpos - gunit[j][2])];
 
               if(cpos == gunit[j][2])
                  tmp += gunit[j][0];
           }
        }
     }
     res += (tmp + " ");
  }
 
  res += " 원정";
  return res;
}

 

배열을 이용한 방법
hanNumber   = new Array ('영', '일', '이', '삼', '사', '오', '육', '칠', '팔', '구' );
fourFour    = new Array ('일', '만', '억', '조' );
fourDigit   = new Array ('일', '십', '백', '천' );
function getHanAmt(num, strValue) {
    str = "";
    strr = num.split(",");
    for (i=0; i<strr.length; i++){
        str += strr[i];
    }
    num = str;
    // 한글금액 처리
    delimiter = ' ';
    var endValue = ' 원';    // 원(圓)
    var endZValue= ' 영';    // 영(零)
    bPos = 0; // 만(萬), 억(億), 조(兆)
    sPos = 0; // 십(十), 백(百), 천(千)
    digit = 0;
    if (strValue==null || strValue=='0'){        // 원단위
        bPos = 0; // 만, 억, 조
        sPos = 0; // 십, 백, 천
        endValue = " 원";
        endZValue = "영 원";
    } else if (strValue=='1'){    //만단위
        bPos = 1; // 만, 억, 조
        sPos = 0; // 십, 백, 천
        endValue = " 원";
        endZValue = "영 만원";
    } else if (strValue=='2') {    //십만단위
        bPos = 1; // 만, 억, 조
        sPos = 1; // 십, 백, 천
        endValue = "만 원";
        endZValue = "영 십만원";
    }
    szDigit = '';
    is_start = false;
    appendFF = false;
    len = num.length;
    szHan = '';
    for (i=len-1;i>=0;i--) {
        szDigit = num.substring(i,i+1);
        digit = parseInt(szDigit);
        if (digit!=0) {
            if (bPos!=0 && sPos==0) {
                if (is_start==true) szHan += delimiter;
                szHan += fourFour[bPos]; // 만, 억
                appendFF=false;
            }
            if (bPos!=0 && appendFF==true) {
                if (is_start==true) szHan += delimiter;
                szHan += fourFour[bPos]; // 만, 억
                appendFF=false;
            }
            if (sPos!=0) szHan += fourDigit[sPos]; // 십, 백, 천
            szHan += hanNumber[digit]; // 일, 이, 삼
            is_start=true;
        }
        else if (sPos==0 && bPos!=0) appendFF = true;
        sPos++;
        if (sPos%4==0) {
            sPos=0;
            bPos++;
            if (bPos>=4) return "(범위초과)";
        }
    }
    if (is_start==false)
    {
        rslt = '';
        return rslt + endZValue;
    }
    else
    {
        rslt = '';
        for(i = szHan.length - 1; i >= 0; i--) {
            rslt += szHan.substring(i, i + 1);
        }
        return rslt + endValue;
    }
}

댓글목록

등록된 댓글이 없습니다.

Total 179건 1 페이지
Javascript 목록
번호 제목 글쓴이 조회 날짜
179 MintState 26 12-10
178 MintState 4540 03-22
177 MintState 6113 07-24
176 MintState 4795 04-19
열람중 MintState 8054 11-02
174 MintState 7302 10-27
173 MintState 7861 09-26
172 MintState 8317 03-08
171 MintState 9566 11-14
170 MintState 7808 07-01
169 MintState 9053 03-05
168 MintState 9964 11-19
167 MintState 15404 04-11
166 MintState 17150 04-06
165 MintState 14550 07-23
164 MintState 14765 06-09
163 MintState 15935 04-29
162 MintState 18305 04-29
161 MintState 15091 04-16
160 MintState 25053 02-17
게시물 검색
모바일 버전으로 보기
CopyRight ©2004 - 2024, YesYo.com MintState. ™