JavaScript에서 대부분의 언어로 제공되는 sprintf/printf 함수 함수를 구현하십시오.
http://www.webtoolkit.info/javaScript-sprintf.html : sprintf 함수 함수의 비교적 완전한 시뮬레이션. 사용 가능한 형식 와일드 카드 :
1. %% - 백분율 부호 자체로 돌아갑니다
2.%B- 이진수
3.%C- ASCII 해당 문자
4.%d- 정수
5.%f- 부동 소수점 번호
6.%O- 10 대 수
7.%s- 문자열
8.%x- 16 진수 (소문자 문자 형식)
9.%X- 16 진수 숫자 (캡슐 문자 형태)
% 부호와 와일드 카드 문자 사이에 사용 가능한 옵션에는 (예 : % .2f)가 포함됩니다.
1. + ( + 및 - 기호를 숫자 앞에 숫자 앞에 표시하도록 강요하십시오. 기본적으로 기본적으로 - 기호에 표시됩니다)
2.- (가변 왼쪽 정렬)
3.0 (오른쪽 정렬 패딩 문자로 0 사용)
4. [0-9] (변수의 최소 너비 설정)
5 .. [0-9] (부동 소수점 정확도 또는 스트링 길이를 설정)
코드 사본은 다음과 같습니다.
/**
*
* JavaScript Sprintf
* http://www.webtoomkit.info/
*
*
**/
sprintfwrapper = {
init : function () {
if (typeof arguments == "undefined") {return null; }
if (arguments.length <1) {return null; }
if (typeof arguments [0]! = "String") {return null; }
if (typeof regexp == "undefined") {return null; }
var string = 인수 [0];
var exp = new regexp (/(%([%] | (/-)? (/+|/x20)? (0)? (/d+)? (/. (/d)?)? ([bcdfosxx]))/g);
var matches = new Array ();
var strings = new Array ();
var convcount = 0;
var stringposstart = 0;
var stringposend = 0;
var matchposend = 0;
var newstring = '';
var match = null;
while (match = exp.exec (string)) {
if (match [9]) {convcount += 1; }
stringposstart = matchposend;
StringPosend = exp.lastIndex- 일치 [0] .length;
문자열 [strings.length] = String.SubString (StringPosStart, StringPosend);
matchposend = exp.lastIndex;
일치 [matches.length] = {
매치 : 매치 [0],
왼쪽 : 일치 [3]? 사실 : 거짓,
사인 : 일치 [4] || '',
패드 : 일치 [5] || '',
최소 : 일치 [6] || 0,
정밀도 : 일치 [8],
코드 : 일치 [9] || '%',
부정적인 : parseint (인수 [convcount]) <0? 사실 : 거짓,
인수 : 문자열 (인수 [convcount])
};
}
문자열 [strings.length] = string.substring (matchposend);
if (matches.length == 0) {return String; }
if ((arguments.length -1) <conccount) {return null; }
var code = null;
var match = null;
var i = null;
for (i = 0; i <matches.length; i ++) {
if (일치 [i] .code == '%') {대체 = '%'}
else if (일치 [i] .code == 'b') {
일치 [i]. argument = string (math.abs (parseint (matches [i]. argument)). ToString (2));
대체 = sprintfwrapper.convert (일치 [i], true);
}
else if (일치 [i] .code == 'c') {
일치 [i] .Argument = string (String.fromCharCode (parseint (math.abs (parseint (matches [i]. argument))));
대체 = sprintfwrapper.convert (일치 [i], true);
}
else if (일치 [i] .code == 'd') {
일치 [i]. argument = string (math.abs (parseint (matches [i]. argument)));
대체 = sprintfwrapper.convert (일치 [i]);
}
else if (일치 [i] .code == 'f') {
일치 [i]. argument = string (math.abs (parsefloat ([i]. argument)). tofixed (일치 [i] .precision? matches [i] .precision : 6));
대체 = sprintfwrapper.convert (일치 [i]);
}
else if (일치 [i] .code == 'o') {
일치 [i]. argument = string (math.abs (parseint (일치 [i]. argument)). Tostring (8));
대체 = sprintfwrapper.convert (일치 [i]);
}
else if (일치 [i] .code == 's') {
일치 [i] .ARGUMENT = MATCHES [i] .ARGUMENT.SUBSTRING (0, MATCHES [i] .PRECISION? 일치
대체 = sprintfwrapper.convert (일치 [i], true);
}
else if (일치 [i] .code == 'x') {
일치 [i]. argument = string (math.abs (parseint (일치 [i]. argument)). Tostring (16));
대체 = sprintfwrapper.convert (일치 [i]);
}
else if (일치 [i] .code == 'x') {
일치 [i]. argument = string (math.abs (parseint (일치 [i]. argument)). Tostring (16));
대체 = sprintfwrapper.convert (일치 [i]). touppercase ();
}
또 다른 {
대체 = 일치 [i] .match;
}
Newstring += 문자열 [i];
Newstring += 대체;
}
Newstring += 문자열 [i];
뉴스 스트링 리턴;
},
변환 : 함수 (match, noSign) {
if (noSign) {
match.sign = '';
} 또 다른 {
match.sign = match.negative? '-': match.sign;
}
var l = match.min -match.argument.length + 1- match.sign.length;
var pad = 새 배열 (l <0? 0 : l) .join (match.pad);
if (! match.left) {
if (match.pad == "0"|| noSign) {
Return match.sign + pad + match.argument;
} 또 다른 {
반환 PAD + match.sign + match.argument;
}
} 또 다른 {
if (match.pad == "0"|| noSign) {
return match.sign + match.argument + pad.replace (/0/g, '');
} 또 다른 {
return match.sign + match.argument + pad;
}
}
}
}
sprintf = sprintfwrapper.init;
추가 형식없이 위치 변수의 내용을 교체하려면 더 간단한 YUI 도구에서 제공된 printf를 사용할 수 있습니다.
코드 사본은 다음과 같습니다.
yahoo.tools.printf = function () {
var num = arguments.length;
var ostr = 인수 [0];
for (var i = 1; i <num; i ++) {
var pattern = "// {" + (i-1) + "//}";
var re = 새로운 regexp (패턴, "g");
ostr = ostr.replace (re, arguments [i]);
}
반환 오스트;
}
그것을 사용할 때 {?}를 사용하여 일치 시키십시오.