오늘은 자바스크립트에서 C++에서 처럼 sprintf 나 print 을 구현해 보겠습니다.
자바스크립트에서는 이런 기능이 없어서 직접 구현을 해주어야 합니다.
이런 부분이꼭 필요한 부분이죠~
* 소스코드
String.prototype.repeat = function(n) {
var sRet = "";
for (var i = 0; i < n; i++) sRet += this;
return sRet;
}
String.prototype.format = function(/* ... */) {
var args = arguments;
var idx = 0;
return this.replace(/%(-?)([0-9]*\.?[0-9]*)([s|f|d|x|X|o])/g, function(all, sign, format, type) {
var arg;
var prefix = format.charAt(0);
format = format.split(/\./);
format[0] = parseInt(format[0], 10) || 0;
format[1] = format[1] === undefined ? NaN : parseInt(format[1], 10) || 0;
if (type == 's') {
arg = isNaN(format[1]) ? args[idx] : args[idx].substr(0, format[1]);
} else {
if (type == 'f') {
arg = (format[1] === 0 ? parseInt(args[idx], 10) : parseFloat(args[idx])).toString();
if (!isNaN(format[1])) arg = arg.replace(RegExp('(\\.[0-9]{' + format[1] + '})[0-9]*'), '$1');
} else if (type == 'd') {
arg = parseInt(args[idx], 10).toString();
} else if (type == 'x') {
arg = parseInt(args[idx], 10).toString(16).toLowerCase();
} else if (type == 'X') {
arg = parseInt(args[idx], 10).toString(16).toUpperCase();
} else if (type == 'o') {
arg = parseInt(args[idx], 10).toString(8);
}
if (prefix == '0') arg = '0'.repeat(format[0] - arg.length) + arg;
}
if (sign == '-') {
arg += ' '.repeat(format[0] - arg.length);
} else {
arg = ' '.repeat(format[0] - arg.length) + arg;
}
format = null;
idx++;
return arg;
}).replace(/%%/g, '%');
}
* 사용법
var aa = "%04d".format( "123" ); // 0123
var aa = "%3s".format( "a" ); // [a ]
기존의 c++에서 쓰는 느낌과 조금 틀리지만 사용하는데는 크게 문제가 없네요.
그럼 많이많이 사용해 주세요..^^
#printf#sprintf#구현#자바스크립트#함수
'프로그램 > Javascript' 카테고리의 다른 글
ajax을 디버깅하는 방법 (0) | 2021.01.15 |
---|---|
쿠키(cookie) 사용법 (0) | 2021.01.15 |
구글 바차트 만들기 (0) | 2021.01.13 |
구글 파이차트 만들기 (0) | 2021.01.13 |
테이블에서 아무스 오버 시 해당 레코드 색상 변경 (0) | 2021.01.13 |