Implementieren Sie die Sprintf-/Printf-Funktionen, die in den meisten Sprachen unter JavaScript zu finden sind.
http://www.webtoolkit.info/javascript-sprintf.html: Eine relativ vollständige Simulation der Sprintf-Funktion. Verfügbare Formatierungsplatzhalter:
1.%% – Gibt das Prozentzeichen selbst zurück
2.%b – Binärzahl
3.%c – ASCII-entsprechendes Zeichen
4.%d – Ganzzahl
5.%f – Gleitkommazahl
6.%o - Oktalzahl
7.%s - Zeichenfolge
8.%x – Hexadezimalzahl (Kleinbuchstabenform)
9.%X – Hexadezimalzahl (Großbuchstabenform)
Zu den verfügbaren Optionen zwischen %-Zeichen und Platzhalterzeichen gehören (z. B. %.2f):
1. (Erzwingen Sie die Anzeige des Und-Zeichens vor der Zahl als Zeichen für positive und negative Zahlen. Standardmäßig zeigen nur negative Zahlen das -Zeichen an)
2.- (Variablen linksbündig)
3.0 (0 als rechtsbündiges Füllzeichen verwenden)
4.[0-9] (Legen Sie die Mindestbreite der Variablen fest)
5..[0-9] (Gleitkommagenauigkeit oder Stringlänge festlegen)
sprintfWrapper = {
init : function () {
if (typeof arguments == "undefiniert") { return null; }
if (arguments.length < 1) { return null; }
if (typeof arguments[0] != "string") { return null; }
if (typeof RegExp == "undefiniert") { return null; }
var string = arguments[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 - match[0].length;
strings[strings.length] = string.substring(stringPosStart, stringPosEnd);
matchPosEnd = exp.lastIndex;
Übereinstimmungen[Übereinstimmungen.Länge] = {
Übereinstimmung: Übereinstimmung[0],
links: match[3] ? wahr: falsch,
Zeichen: match[4] || '',
pad: match[5] || ' ',
min: match[6] || 0,
Präzision: match[8],
Code: match[9] || '%',
negativ: parseInt(arguments[convCount]) < 0 ? wahr: falsch,
Argument: String(arguments[convCount])
};
}
strings[strings.length] = string.substring(matchPosEnd);
if (matches.length == 0) { return string; }
if ((arguments.length - 1) < convCount) { return null; }
var code = null;
var match = null;
var i = null;
für (i=0; i if (matches[i].code == '%') { substitution = '%' } newString = strings[i]; } return newString; }, konvertieren: function(match, nosign){ sprintf = sprintfWrapper.init;
sonst wenn (matches[i].code == 'b') {
matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(2));
substitution = sprintfWrapper.convert(matches[i], true);
}
sonst wenn (matches[i].code == 'c') {
matches[i].argument = String(String.fromCharCode(parseInt(Math.abs(parseInt(matches[i].argument)))));
substitution = sprintfWrapper.convert(matches[i], true);
}
sonst wenn (matches[i].code == 'd') {
matches[i].argument = String(Math.abs(parseInt(matches[i].argument)));
substitution = sprintfWrapper.convert(matches[i]);
}
sonst wenn (matches[i].code == 'f') {
matches[i].argument = String(Math.abs(parseFloat(matches[i].argument)).toFixed(matches[i].precision ? matches[i].precision : 6));
substitution = sprintfWrapper.convert(matches[i]);
}
sonst wenn (matches[i].code == 'o') {
matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(8));
substitution = sprintfWrapper.convert(matches[i]);
}
sonst wenn (matches[i].code == 's') {
entspricht[i].argument = entspricht[i].argument.substring(0, entspricht[i].precision ? entspricht[i].precision : entspricht[i].argument.length)
substitution = sprintfWrapper.convert(matches[i], true);
}
sonst wenn (matches[i].code == 'x') {
matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
substitution = sprintfWrapper.convert(matches[i]);
}
sonst wenn (matches[i].code == 'X') {
matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
substitution = sprintfWrapper.convert(matches[i]).toUpperCase();
}
sonst {
substitution = matches[i].match;
}
newString = substitution;
newString = strings[i];
if (nosign) {
match.sign = '';
} sonst {
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;
} sonst {
Return-Pad match.sign match.argument;
}
} sonst {
if (match.pad == "0" || nosign) {
return match.sign match.argument pad.replace(/0/g, ' ');
} sonst {
return match.sign match.argument pad;
}
}
}
}
Si vous souhaitez simplement remplacer le contenu de la variable de position sans formatage supplémentaire, vous pouvez utiliser le printf fourni dans les outils YUI relativement simples :
Lorsqu'il est utilisé comme YAHOO.Tools.printf("Display string {0}, {1}.", "1", "2"); utilisez {?} pour faire correspondre.