바인딩을 사용하여 masknumber 를 사용하여 자동으로 천단위로 콤마(,)를 출력 할 수 있지만.


하나의 필드에 숫자타입과 문자열을 혼합하여 사용하는 경우 숫자타입부분에 콤마를 생성해서 문자열로 리턴하는 스크립트이다.


utlf_numberFormat()


/******************************************************************************* 

 * 함수명     : utlf_numberFormat()

 * 설명       : 숫자에 ','를 입력하여 반환

 * argument    : strNum : 숫자 또는 숫자형식 문자열( 예 : -1234567.89 , "123456789") 

 *                     sFind : 찾고자 하는 문자열( 예 : "bb" ) 

 *                     nStart : 검색 시작위치 (옵션 : Default=0) ( 예 : 1 ) 

 * return Type : (String)

 *               변경된 문자열이나 숫자가 없으면 Null 리턴

 *               변경된 문자열이나 숫자가 있으면 ","가 들어간 문자열 ( 예 : -1,234,567.89 )

 * Test Ex)

 * trace("문자열" + utlf_numberFormat("1234565789"));

 * trace("문자열 소수점 포함" + utlf_numberFormat("12345657.89"));

 * trace("문자열 - 포함" + utlf_numberFormat("-1234565789"));

 * trace("문자열 - 포함 소수점 포함" + utlf_numberFormat("-12345657.89"));

 * 

 * trace("숫자형" + utlf_numberFormat(1234565789));

 * trace("숫자형 소수점 포함" + utlf_numberFormat(12345657.89));

 * trace("숫자형 - 포함" + utlf_numberFormat(-1234565789));

 * trace("숫자형 - 포함 소수점 포함" + utlf_numberFormat(-12345657.89));

 * 

 * trace("한글,영문 포함" + utlf_numberFormat("한x-12345657.89"));

 * trace("한글 포함" + utlf_numberFormat("한-12345657.89"));

 * trace("영문 포함" + utlf_numberFormat("x-12345657.89"));

******************************************************************************/

function utlf_numberFormat(strNum)

{

var ppos, sDigit, nEnd, nStart=0, sRet=""; 


if( utlf_isNull(strNum)  ) return ""

var reg = /(^[+-]?\d+)(\d{3})/;   // 정규식

if( !reg.test(strNum) ) return strNum;

strNum = strNum.toString();

if( strNum.charAt(0) == "+" || strNum.charAt(0) == "-" ) { 

sRet += strNum.charAt(0); 

nStart = 1

}

ppos = utlf_Pos(strNum, ".", nStart); 

if( ppos < 0 ) {

nEnd = strNum.length; 

}

else {

nEnd = ppos;

}

sDigit = strNum.substr(nStart, nEnd - nStart); 

for( pos = 0 ; pos < sDigit.length ; pos ++ ) { 

if( pos != 0 && (sDigit.length-pos)%3 == 0

sRet += ","

sRet += sDigit.charAt(pos);

sRet += strNum.substr(nEnd); 


return sRet; 

}


utlf_Pos()


/******************************************************************************* 

 * 함수명     : utlf_Pos()

 * 설명       : 문자열의 위치를 대소문자 구별하여 찾는다 

 * argument    : sOrg : 원래 문자열( 예 : "aaBBbbcc" ) 

 *               sFind : 찾고자 하는 문자열( 예 : "bb" ) 

 *               nStart : 검색 시작위치 (옵션 : Default=0) ( 예 : 1 ) 

 * return Type : (Number)

 *               찾고자 하는 문자열의 시작위치가 없으면 -1 리턴

 *               찾고자 하는 문자열의 시작위치 ( 예 : 4 ) 

******************************************************************************/ 

function utlf_Pos(sOrg, sFind, nStart)

{

    if( utlf_isNull(sOrg) || utlf_isNull(sFind) ) return -1;

    if( utlf_isNull(nStart) )    nStart = 0;


    return sOrg.indexOf(sFind, nStart);

}


'Tools > XPlatform' 카테고리의 다른 글

GetFormFromHandle  (0) 2015.11.06
autosizingtype 문제점  (0) 2015.10.13

PHP에는 numner_format() 가 있어 숫자 타입의 데이터에 콤마(,) 또는 소숫점(.)을 표현 하는데 큰 어려움이 없지만


Javascript 에는 위의 함수가 없기 때문에 숫자 타입의 데이터에 3자리마다 콤마를 찍어 출력하고 싶은 경우 다음 함수를 만들어 사용한다.



<실행결과>

1) 결과와 같이 숫자타입의 문자열이 들어가면 3자리 마다 콤마(,)를 삽입하여 리턴해준다.

var res = gfnNumberFormat("10000")

"10,000"


2) 소수점 숫자타입의 문자열도 문제없이 콤마(,)를 삽입하여 리턴해준다.

var res = gfnNumberFormat("1000000.00")

"1,000,000.00"


3) 한글문자열이 입력되면 한글 그대로 출력해준다.

var res = gfnNumberFormat("한글테스트")

"한글테스트"


4) 영문문자열이 입력되면 영문 그대로 출력해준다.

var res = gfnNumberFormat("abcdefg")

"abcdefg"


함수는 구현 방법에 따라 다르게 구현 할 수 있는데, 위의 함수는 정규식을 이용하여 구현하였기 때문에 한글, 영문, 숫자타입, 소수점에 대해서 예외처리 없이 구현할 수 있다.

'프로그래밍 > Javascript' 카테고리의 다른 글

Form에서 데이터 전송시 주의할 점  (0) 2015.10.12

+ Recent posts