Implementieren Sie die Funktion der Sprintf/Printf -Funktion, die in den meisten Sprachen unter JavaScript verfügbar ist.
http://www.webbtoolkit.info/javascript-sprintf.html: Eine relativ vollständige Simulation der Sprintf-Funktionsfunktionen. Verfügbare formatierte Wildcards:
1. %% - Kehren Sie zum Prozentzeichen selbst zurück
2.%b - Binärzahl
3.%C - ASCII entsprechende Zeichen
4.%d - Ganzzahl
5.%f - schwimmende Punktzahl
6.%O - Oktalzahl
7.%s - String
8.%x - Hexadezimalzahl (Kleinbuchstabenformular)
9.%x - Hexadezimalstellen (Kapselbriefform)
Zu den verfügbaren Optionen zwischen den % Sign und den Wildcard -Charakteren gehören (z. B. % .2f):
1. + (zwingen die + und - Symbole, die vor der Zahl als positive und negative Zahlen angezeigt werden sollen. Standardmäßig werden nur negative Zahlen im Symbol angezeigt.
2.- (Variable links ausgerichtet)
3.0 (Verwenden Sie 0 als recht ausgerichtete Polstercharakter)
4. [0-9] (setzen Sie die minimale Breite der Variablen)
5 .. [0-9] (Stellen Sie die Gleitkommagenauigkeit oder die Länge der Zeichenfolge fest)
Die Codekopie lautet wie folgt:
/**
*
* JavaScript Sprintf
* http://www.webbtoolkit.info/
*
*
**//
SprintfWrapper = {
init: function () {
if (typeof argumente == "undefined") {return null; }
if (Argumente.length <1) {return null; }
if (Typeof Argumente [0]! = "String") {return null; }
if (typeof regexp == "undefined") {return null; }
var String = Argumente [0];
var exp = neuer regexp (/(%([%] | (/-)? (/+|/x20)? (0)? (/d+)? (/. (/d)? ([bcdfosxx])))/g);
var Matches = new Array ();
var Strings = new Array ();
var convcount = 0;
var StringPosStart = 0;
var stringsposend = 0;
var matchposend = 0;
var NewString = '';
var match = null;
while (match = exp.exec (string)) {
if (match [9]) {curprCount += 1; }
StringPosStart = MatchPosend;
StringPosend = exp.lastIndex - Match [0] .Length;
Strings [Strings.Length] = String.SubString (StringPosStart, StringPosend);
MatchPosend = exp.lastIndex;
Matches [Matches.length] = {
Match: Match [0],
Links: Match [3]? Richtig: Falsch,
Zeichen: Match [4] || '',
Pad: Match [5] || '',
min: Match [6] || 0,,
Präzision: Übereinstimmung [8],
Code: Übereinstimmung [9] || '%',
Negativ: ParseInt (Argumente [überzeugen]) <0? Richtig: Falsch,
Argument: String (Argumente [überzeugen])
};
}
Strings [Strings.Length] = String.SubString (MatchPosend);
if (Matches.length == 0) {return String; }
if ((Argumente.Length - 1) <ConvCount) {return null; }
var code = null;
var match = null;
var i = null;
für (i = 0; i <Matches.length; i ++) {
if (übereinstimmt [i] .Code == '%') {Substitution = '%'}
sonst wenn (übereinstimmt [i] .Code == 'B') {
Übereinstimmung [i] .Argument = String (math.abs (parseInt (übereinstimmt [i] .Argument)). TOSTRING (2));
Substitution = SprintfWrapper.Convert (Übereinstimmungen [i], wahr);
}
else wenn (übereinstimmt [i] .Code == 'C') {
Matches [i] .Argument = String (string.fromCharCode (parseInt (math.abs (parseInt (übereinstimmt) [i] .Argument))));
Substitution = SprintfWrapper.Convert (Übereinstimmungen [i], wahr);
}
sonst wenn (übereinstimmt [i] .Code == 'd') {
Übereinstimmung [i] .Argument = String (math.abs (parseInt (übereinstimmt [i] .Argument)));
Substitution = SprintfWrapper.Convert (Übereinstimmungen [i]);
}
sonst wenn (übereinstimmt [i] .Code == 'f') {
Übereinstimmungen [i] .Argument = String (math.abs (Parsefloat (Übereinstimmungen [i] .Argument)). Tofixed (Übereinstimmungen [i] .Precision? Übereinstimmungen [i] .Precision: 6));
Substitution = SprintfWrapper.Convert (Übereinstimmungen [i]);
}
sonst wenn (übereinstimmt [i] .Code == 'o') {
Matches [i] .Argument = String (math.abs (ParseInt (Übereinstimmung [i] .Argument)). TOSTRING (8));
Substitution = SprintfWrapper.Convert (Übereinstimmungen [i]);
}
sonst wenn (übereinstimmt [i] .Code == 's') {
Übereinstimmungen [i] .Argument = Übereinstimmung [i] .Argument.substring (0, Übereinstimmungen [i] .Precision? Übereinstimmungen [i] .Precision: Übereinstimmungen [i] .Argument.Length)
Substitution = SprintfWrapper.Convert (Übereinstimmungen [i], wahr);
}
else wenn (übereinstimmt [i] .Code == 'x') {
Matches [i] .Argument = String (math.abs (ParseInt (Übereinstimmungen [i] .Argument)). TOSTRING (16));
Substitution = SprintfWrapper.Convert (Übereinstimmungen [i]);
}
else wenn (übereinstimmt [i] .Code == 'x') {
Matches [i] .Argument = String (math.abs (ParseInt (Übereinstimmungen [i] .Argument)). TOSTRING (16));
Substitution = SprintfWrapper.Convert (Übereinstimmungen [i]). Touppercase ();
}
anders {
Substitution = Übereinstimmung [i] .Match;
}
NewString += Strings [i];
NewString += Substitution;
}
NewString += Strings [i];
Rückgabe der Newstring;
},
konvertieren: Funktion (Übereinstimmung, NoSign) {
if (nosign) {
Match.Sign = '';
} anders {
match.sign = match.negative? '-': Match.Sign;
}
var l = match.min - match.argument.length + 1 - Match.Sign.length;
var pad = new Array (l <0? 0: l) .join (match.pad);
if (! match.left) {
if (match.pad == "0" || nosign) {
return match.sign + pad + match.argument;
} anders {
return pad + match.Sign + match.argument;
}
} anders {
if (match.pad == "0" || nosign) {
return match.Sign + match.argument + pad.replace (/0/g, '');
} anders {
return match.sign + match.argument + pad;
}
}
}
}
Sprintf = SprintfWrapper.init;
Wenn Sie nur den Inhalt der Positionsvariablen ohne zusätzliche Formatierung ersetzen möchten, können Sie die in den einfacheren YUI -Tools bereitgestellten PRINTF verwenden:
Die Codekopie lautet wie folgt:
Yahoo.tools.printf = function () {
var num = argumente.length;
var ostr = argumente [0];
für (var i = 1; i <num; i ++) {
var muster = "// {" + (i-1) + "//}";
var re = new regexp (Muster, "g");
ostr = ostr.replace (Re, Argumente [i]);
}
Return OSTR;
}
Verwenden Sie bei der Verwendung {?}, Um es zu entsprechen.