قم بتنفيذ وظيفة وظيفة sprintf/printf المتوفرة في معظم اللغات تحت JavaScript.
http://www.webtoolkit.info/javascript-sprintf.html: محاكاة كاملة نسبيا لوظائف وظيفة sprintf. البطاقات البرية المتاحة المنسقة:
1. ٪٪ - العودة إلى علامة النسبة المئوية نفسها
2. ٪ ب - العدد الثنائي
3. ٪ C - ASCII الأحرف المقابلة
4. ٪ د - عدد صحيح
5. ٪ F - رقم نقطة العائمة
6. ٪ O - العدد الثماني
7. ٪ S - سلسلة
8. ٪ x - عدد سداسي عشري (نموذج حرف صغير)
9. ٪ X - أرقام سداسية عشرية (نموذج خطاب كبسولة)
تتضمن الخيارات المتوفرة بين علامة ٪ علامة وشخصية البدل (على سبيل المثال ، ٪ .2F):
1. + (إجبار الرموز + و - التي سيتم عرضها أمام الرقم كأرقام إيجابية وسلبية. بشكل افتراضي ، سيتم عرض الأرقام السلبية فقط في الرمز -)
2.- (متغير اليسار محاذاة)
3.0 (استخدم 0 كحرف حشوة محاذاة يميني)
4. [0-9] (اضبط الحد الأدنى لعرض المتغير)
5 .. [0-9] (اضبط دقة النقطة العائمة أو طول السلسلة)
نسخة الكود كما يلي:
/**
*
* JavaScript Sprintf
* http://www.webtoolkit.info/
*
*
**/
SprintfWrapper = {
init: function () {
if (typeof mations == "undefined") {return null ؛ }
if (encuments.length <1) {return null ؛ }
if (typeof mations [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 ؛
بينما (match = exp.exec (سلسلة)) {
if (match [9]) {convcount += 1 ؛ }
StringPosStart = MatchPosend ؛
StringPosend = exp.lastIndex - Match [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 ((encuments.length - 1) <convcount) {return null ؛ }
VAR CODE = NULL ؛
var match = null ؛
var i = null ؛
لـ (i = 0 ؛ i <matches.length ؛ i ++) {
إذا (تطابق [i] .code == '٪')
آخر إذا (تطابق [i] .code == 'b') {
تطابقات [i] .argument = string (math.abs (parseint (تطابق [i] .argument)). toString (2)) ؛
الاستبدال = sprintfwrapper.convert (تطابق [i] ، صحيح) ؛
}
آخر إذا (تطابق [i] .code == 'c') {
تطابق [i] .argument = string (string.fromcharcode (parseint (math.abs (parseint (Matches [i] .Argument))))))) ؛
الاستبدال = sprintfwrapper.convert (تطابق [i] ، صحيح) ؛
}
آخر إذا (تطابق [i] .code == 'd') {
تطابقات [i] .argument = string (math.abs (parseint (تطابق [i] .argument))) ؛
الاستبدال = SprintfWrapper.convert (تطابق [i]) ؛
}
آخر إذا (تطابق [i] .code == 'f') {
تطابقات [i] .argument = string (math.abs (parsefloat (تطابق [i] .argument)). tofixed (تطابق [i].
الاستبدال = SprintfWrapper.convert (تطابق [i]) ؛
}
آخر إذا (تطابق [i] .code == 'o') {
تطابقات [i] .Argument = string (Math.ABS (parseint (تطابق [i] .argument)). toString (8)) ؛
الاستبدال = SprintfWrapper.convert (تطابق [i]) ؛
}
آخر إذا (تطابق [i] .code == 's') {
تطابقات [i] .Argument = Matches [i] .Argument.SubString (0 ، تطابق [i].
الاستبدال = sprintfwrapper.convert (تطابق [i] ، صحيح) ؛
}
آخر إذا (تطابق [i] .code == 'x') {
تطابقات [i] .argument = string (math.abs (parseint (تطابق [i] .Argument)). toString (16)) ؛
الاستبدال = SprintfWrapper.convert (تطابق [i]) ؛
}
آخر إذا (تطابق [i] .code == 'x') {
تطابقات [i] .argument = string (math.abs (parseint (تطابق [i] .Argument)). toString (16)) ؛
الاستبدال = SprintfWrapper.convert (تطابق [i]). touppercase () ؛
}
آخر {
الاستبدال = المباريات [i] .match ؛
}
Newstring += Strings [i] ؛
ترجمة الأخبار += الاستبدال ؛
}
Newstring += Strings [i] ؛
عودة الأخبار.
} ،
تحويل: وظيفة (مطابقة ، nosign) {
إذا (nosign) {
match.sign = '' ؛
} آخر {
match.sign = match.negated؟ '-': match.sign ؛
}
var l = match.min - match.argument.length + 1 - match.sign.length ؛
var pad = new array (l <0؟ 0: l). join (match.pad) ؛
إذا (! match.left) {
if (match.pad == "0" || nosign) {
إرجاع match.sign + pad + match.argument ؛
} آخر {
إرجاع لوحة + match.sign + match.argument ؛
}
} آخر {
if (match.pad == "0" || nosign) {
إرجاع match.sign + match.argument + pad.replace (/0/g ، '') ؛
} آخر {
إرجاع match.sign + match.argument + pad ؛
}
}
}
}
Sprintf = SprintfWrapper.init ؛
إذا كنت ترغب فقط في استبدال محتوى متغير الموضع دون تنسيق إضافي ، فيمكنك استخدام printf المتوفرة في أدوات yui أبسط:
نسخة الكود كما يلي:
yahoo.tools.printf = function () {
var num = ediuments.length ؛
var ostr = وسيطات [0] ؛
لـ (var i = 1 ؛ i <num ؛ i ++) {
var pattern = "// {" + (i-1) + "//}" ؛
var re = new regexp (نمط ، "g") ؛
OSTR = Ostr.replace (Re ، ediuments [i]) ؛
}
إرجاع OST
}
عند استخدامه ، استخدم {؟} لمطابقته.