التنسيق هو تحويل أي نوع من البيانات إلى سلسلة من خلال عمليات التنسيق. على سبيل المثال ، ما يلي
نسخة الكود كما يلي:
<script>
console.log (verper.format ('{0} - {1} - {2}' ، 12 ، 24 ، 25)) ؛ // مخرجات "12 - 24 - 25"
</script>
فيما يلي رمز كامل يمكن نسخه في مشروعك.
نسخة الكود كما يلي:
<! doctype html>
<html>
<head>
<meta http-equiv = "content-type" content = "text/html ؛ charset = utf-8">
</head>
<body>
<script src = "http://code.jquery.com/jquery-1.9.1.min.js"> </script>
<script>
(وظيفة() {
VAR Chopper = window.chopper = window.chopper || {الثقافات: {}} ،
الرياضيات = الرياضيات ،
formatregexp = // {(/d+) (: [^/}]+)؟/}/g ،
function = "function" ،
String = "String" ،
الرقم = "الرقم" ،
كائن = "كائن" ،
NULL = "NULL" ،
منطقية = "منطقية" ،
غير محدد = "غير محدد" ،
شريحة = [] .slice ،
العلمان = window.globalize ،
standardformatregexp =/^(n | c | p | e) (/d*) $/i ،
priteralregexp = /(///.)| ((indud '' budap^'' 'Budap' '' ؟)| ((
commaregexp = // ،/g ،
فارغ = "" ،
النقطة = "." ،
فاصلة = "،" ،
Sharp = "#" ،
صفر = "0" ،
العنصر النائب = "؟؟" ،
en = "en-us" ،
ObjectToString = {} .ToString ؛
// الثقافات
Chopper.cultures ["en-us"] = {
الاسم: en ،
numberFormat: {
النمط: ["-n"] ،
العشرية: 2 ،
"،": "،" ،
".": "." ،
مجموعات: [3] ،
النسبة المئوية: {
النمط: ["-N ٪" ، "N ٪"] ،
العشرية: 2 ،
"،": "،" ،
".": "." ،
مجموعات: [3] ،
رمز: "٪"
} ،
عملة: {
النمط: ["($ n)" ، "$ n"] ،
العشرية: 2 ،
"،": "،" ،
".": "." ،
مجموعات: [3] ،
الرمز: "$"
}
} ،
التقويمات: {
معيار: {
أيام: {
الأسماء: ["الأحد" ، "الاثنين" ، "الثلاثاء" ، "الأربعاء" ، "الخميس" ، "الجمعة" ، "السبت"] ،
Namesabbr: ["Sun" ، "Mon" ، "Tue" ، "Wed" ، "Thu" ، "Fri" ، "Sat"] ،
Namesshort: ["Su" ، "Mo" ، "Tu" ، "We" ، "Th" ، "FR" ، "SA"]
} ،
شهور: {
الأسماء: ["يناير" ، "فبراير" ، "مارس" ، "أبريل" ، "مايو" ، "يونيو" ، "يوليو" ، "يوليو" ، "أغسطس" ، "سبتمبر" ، "أكتوبر" ، "نوفمبر" ، "ديسمبر" ،
Namesabbr: ["Jan" ، "Feb" ، "Mar" ، "Apr" ، "May" ، "Jun" ، "Jul" ، "Aug" ، "Sep" ، "Oct" ، "Nov" ، "Dec"
} ،
صباحا: ["am" ، "am" ، "am"] ،
PM: ["PM" ، "PM" ، "PM"] ،
أنماط: {
D: "M/D/Yyyy" ،
D: "DDDD ، MMMM DD ، Yyyy" ،
F: "DDDD ، MMMM DD ، YYYY H: MM: SS TT" ،
G: "M/D/Yyyy H: MM TT" ،
G: "M/D/Yyyy H: MM: SS TT" ،
م: "MMMM DD" ،
م: "MMMM DD" ،
S: "yyyy"-'mm'-'ddthh': 'mm': 'ss "،
T: "H: MM TT" ،
T: "H: MM: SS TT" ،
u: "yyyy '-' mm '-' dd hh ':' mm ':' ss'z '" ،
Y: "Mmmm ، Yyyy" ،
Y: "Mmmm ، yyyy"
} ،
"/": "/" ،
":": ":" ،
First Day: 0 ،
twodigityearmax: 2029
}
}
} ؛
وظيفة FindCulture (الثقافة) {
إذا (الثقافة) {
if (culture.numberformat) {
العودة الثقافة
}
if (typeof culture === string) {
VAR CULLOURES = Chopper.cultures ؛
العودة الثقافات [الثقافة] || الثقافات [Culture.split ("-") [0]] || باطل؛
}
العودة لاغية.
}
العودة لاغية.
}
وظيفة GetCulture (الثقافة) {
إذا (الثقافة) {
الثقافة = استزراع (الثقافة) ؛
}
ثقافة العودة || Chopper.cultures.current ؛
}
دالة expressnumberformat (numberFormat) {
numberFormat.GroupSizes = numberFormat.GroupSize ؛
numberformat.percent.groupsizes = numberFormat.percent.groupsize ؛
numberformat.currency.groupsizes = numberformat.currency.groupsize ؛
}
Chopper.culture = وظيفة (cultureName) {
VAR CULLOURES = Chopper.cultures ، الثقافة ؛
if (cultureName! == undefined) {
الثقافة = استزراع (culturename) || الثقافات [en] ؛
Culture.Calendar = Culture.Calendars.Standard ؛
الثقافات. current = الثقافة ؛
if (العالمية &&! العالمية. تحميل) {
expressnumberformat (Culture.NumberFormat) ؛
}
} آخر {
إرجاع الثقافات.
}
} ؛
Chopper.culture (en) ؛
// تنسيق الرقم
وظيفة formatnumber (الرقم ، التنسيق ، الثقافة) {
الثقافة = الثقافة (الثقافة) ؛
var numberformat = culture.numberformat ،
مجموعات = numberformat.groupsize [0] ،
GroupSeparator = numberFormat [فواصل] ،
عشري = numberFormat [Point] ،
الدقة = numberformat.decimals ،
pattern = numberformat.pattern [0]
الحرفية = [] ،
رمز،
Iscurrency ، Ispercent ،
customprecision ،
FormatandPrecision ،
سلبي = الرقم <0 ،
عدد صحيح،
جزء،
integerlength ،
طول الكسر ،
استبدال = فارغ ،
القيمة = فارغة ،
idx ،
طول،
الفصل ،
Hasgroup ،
encnegativeFormat ،
عشرية ،
Sharpindex ،
ZeroIndex ،
Haszero ، Hassharp ،
في المئة ،
currencyIndex ،
startzeroindex ،
ابدأ = -1 ،
نهاية؛
// إرجاع سلسلة فارغة إذا لم يكن هناك رقم
إذا (رقم === غير محدد) {
العودة فارغة
}
if (! isFinite (رقم)) {
رقم الإرجاع ؛
}
// إذا لم يكن هناك تنسيق ، فسيتم إرجاع الرقم.
if (! format) {
إرجاع الثقافة. name.length؟ number.tolocalestring (): number.toString () ؛
}
FormatAndPrecision = StandardFormatRegexp.exec (Format) ؛
// التنسيق القياسي
if (formatandPrecision) {
Format = formatandPrecision [1] .ToLowerCase () ؛
isCurrency = تنسيق === "C" ؛
isPercent = تنسيق === "p" ؛
if (isCurrency || ispercent) {
// احصل على معلومات تنسيق أرقام محددة إذا كان التنسيق عملة أو في المئة
numberFormat = isCurrency؟ numberFormat.currency: numberFormat.percent ؛
مجموعات = numberFormat.GroupSize [0] ؛
GroupSeparator = numberFormat [comma] ؛
عشري = numberFormat [point] ؛
Precision = numberFormat.decimals ؛
الرمز = numberFormat.symbol ؛
نمط = numberFormat.pattern [سلبي؟ 0: 1] ؛
}
customprecision = formatandPrecision [2] ؛
إذا (customprecision) {
Precision = +customprecision ؛
}
// رقم الإرجاع بتنسيق أسي
if (format === "e") {
إرجاع customprecision؟ number.toexponential (الدقة): number.toexponential () ؛ // toexponential () و toexponential (غير محددة) مختلفة في FF #653438.
}
// اضرب إذا كان التنسيق في المئة
إذا (isPercent) {
الرقم *= 100 ؛
}
الرقم = الجولة (الرقم ، الدقة) ؛
سلبي = الرقم <0 ؛
الرقم = number.split (point) ؛
عدد صحيح = رقم [0] ؛
الكسر = الرقم [1] ؛
// استبعاد "-" إذا كان الرقم سلبيًا.
إذا (سلبي) {
integer = integer.substring (1) ؛
}
القيمة = عدد صحيح ؛
integerlength = integer.length ؛
// أضف فاصل المجموعة إلى الرقم إذا كان أطول بما فيه الكفاية
if (integerLength> = groupsize) {
القيمة = فارغة ؛
لـ (idx = 0 ؛ idx <integerLength ؛ idx ++) {
if (idx> 0 && (integerLength - idx) ٪ groupizize === 0) {
القيمة += GroupSeparator ؛
}
value += integer.charat (idx) ؛
}
}
إذا (الكسر) {
القيمة + = الكسر العشري + ؛
}
if (format === "n" &&! سلبية) {
قيمة الإرجاع
}
رقم = فارغ ؛
لـ (idx = 0 ، طول = pattern.length ؛ idx <length ؛ idx ++) {
ch = pattern.charat (idx) ؛
if (ch === "n") {
الرقم += القيمة ؛
} آخر إذا (ch === "$" || ch === "٪") {
رقم += رمز ؛
} آخر {
رقم += الفصل ؛
}
}
رقم الإرجاع ؛
}
// تنسيق مخصص
//
// تنسيق منفصل حسب الأقسام.
// جعل الرقم إيجابي
إذا (سلبي) {
الرقم = -عدد ؛
}
if (format.indexof ("'")> -1 || format.indexof ("/" ")> -1 || format.indexof (" // ")> -1) {
Format = format.replace (piteralregexp ، function (match) {
var quotechar = match.charat (0) .replace ("//" ، "") ،
حرفي = match.slice (1) .replace (quotechar ، "") ؛
الحرفية. push (حرفي) ؛
عودة العنصر النائب
}) ؛
}
format = format.split ("؛") ؛
if (سلبي && التنسيق [1]) {
// الحصول على تنسيق سلبي
التنسيق = التنسيق [1] ؛
hasnegativeFormat = صحيح ؛
} آخر إذا (رقم === 0) {
// تنسيق للأصفار
التنسيق = التنسيق [2] || تنسيق [0] ؛
if (format.indexof (sharp) == -1 && format.indexof (Zero) == -1) {
// تنسيق العودة إذا كان ثابت السلسلة.
تنسيق العودة
}
} آخر {
التنسيق = التنسيق [0] ؛
}
النسبة المئوية = format.indexof ("٪") ؛
currencyIndex = format.indexof ("$") ؛
isPercent = ٪ endindex! = -1 ؛
iscurrency = currencyIndex! = -1 ؛
// اضرب الرقم إذا كان التنسيق في المئة
إذا (isPercent) {
الرقم *= 100 ؛
}
if (isCurrency && format [currencyIndex - 1] === "//") {
format = format.split ("//"). انضمام ("") ؛
iscurrency = خطأ ؛
}
if (isCurrency || ispercent) {
// احصل على معلومات تنسيق أرقام محددة إذا كان التنسيق عملة أو في المئة
numberFormat = isCurrency؟ numberFormat.currency: numberFormat.percent ؛
مجموعات = numberFormat.GroupSize [0] ؛
GroupSeparator = numberFormat [comma] ؛
عشري = numberFormat [point] ؛
Precision = numberFormat.decimals ؛
الرمز = numberFormat.symbol ؛
}
HasGroup = format.indexof (comma)> -1 ؛
إذا (hasgroup) {
format = format.replace (commaregexp ، فارغة) ؛
}
decimalindex = format.indexof (point) ؛
الطول = التنسيق. الطول ؛
if (decimalindex! = -1) {
الكسر = number.toString (). split ("e") ؛
إذا (الكسر [1]) {
الكسر = جولة (رقم ، Math.ABS (الكسر [1])) ؛
} آخر {
الكسر = الكسر [0] ؛
}
الكسر = fraction.split (نقطة) [1] || فارغ؛
ZeroIndex = format.lastindexof (Zero) - DecimalIndex ؛
SharpIndex = format.lastindexof (Sharp) - DecimalIndex ؛
Haszero = ZeroIndex> -1 ؛
hassharp = SharpIndex> -1 ؛
idx = fraction.length ؛
if (! haszero &&! hassharp) {
Format = format.SubString (0 ، decimalindex) + format.SubString (decimalindex + 1) ؛
الطول = التنسيق. الطول ؛
DecimalIndex = -1 ؛
idx = 0 ؛
} if (Haszero && ZeroIndex> SharpIndex) {
idx = ZeroIndex ؛
} آخر إذا (SharpIndex> ZeroIndex) {
if (hassharp && idx> SharpIndex) {
idx = SharpIndex ؛
} آخر إذا (haszero && idx <ZeroIndex) {
idx = ZeroIndex ؛
}
}
if (idx> -1) {
الرقم = الجولة (الرقم ، idx) ؛
}
} آخر {
رقم = جولة (رقم) ؛
}
SharpIndex = Format.Indexof (Sharp) ؛
startzeroIndex = ZeroIndex = format.indexof (Zero) ؛
// تحديد فهرس العنصر النائب الرقم الأول
if (SharpIndex == -1 && ZeroIndex! = -1) {
ابدأ = ZeroIndex ؛
} آخر إذا (SharpIndex! = -1 && Zeroindex == -1) {
ابدأ = SharpIndex ؛
} آخر {
start = SharpIndex> ZeroIndex؟ Zeroindex: Sharpindex ؛
}
SharpIndex = format.lastindexof (Sharp) ؛
Zeroindex = format.lastindexof (صفر) ؛
// تحديد فهرس العنصر النائب الأخير
if (SharpIndex == -1 && ZeroIndex! = -1) {
نهاية = ZeroIndex ؛
} آخر إذا (SharpIndex! = -1 && Zeroindex == -1) {
نهاية = SharpIndex ؛
} آخر {
End = SharpIndex> ZeroIndex؟ Sharpindex: ZeroIndex ؛
}
إذا (ابدأ == طول) {
نهاية = ابدأ ؛
}
إذا (ابدأ! = -1) {
value = number.toString (). split (point) ؛
عدد صحيح = القيمة [0] ؛
الكسر = القيمة [1] || فارغ؛
integerlength = integer.length ؛
fractionLength = fraction.length ؛
if (سلبي && (رقم * -1)> = 0) {
سلبي = خطأ ؛
}
// أضف فاصل المجموعة إلى الرقم إذا كان أطول بما فيه الكفاية
إذا (hasgroup) {
if (integerLength === Groupsize && integerlength <decimalindex - startzeroindex) {
integer = GroupSeparator + Integer ؛
} آخر إذا (integerLength> getsize) {
القيمة = فارغة ؛
لـ (idx = 0 ؛ idx <integerLength ؛ idx ++) {
if (idx> 0 && (integerLength - idx) ٪ groupizize === 0) {
القيمة += GroupSeparator ؛
}
value += integer.charat (idx) ؛
}
عدد صحيح = القيمة ؛
}
}
الرقم = format.SubString (0 ، ابدأ) ؛
إذا (سلبي &&! hasnegativeFormat) {
رقم += "-" ؛
}
لـ (idx = start ؛ idx <length ؛ idx ++) {
ch = format.charat (idx) ؛
if (decimalindex == -1) {
if (end - idx <integerlength) {
رقم += عدد صحيح ؛
استراحة؛
}
} آخر {
if (ZeroIndex! = -1 && ZeroIndex <idx) {
استبدال = فارغ ؛
}
if ((decimalindex - idx) <= integerlength && decimalindex - idx> -1) {
رقم += عدد صحيح ؛
idx = decimalindex ؛
}
if (decimalindex === idx) {
رقم + = (الكسر؟ عشري: فارغ) + الكسر ؛
idx + = end - decimalindex + 1 ؛
يكمل؛
}
}
if (ch === Zero) {
رقم += الفصل ؛
استبدال = الفصل ؛
} آخر إذا (ch === حاد) {
رقم += استبدال ؛
}
}
if (end> = start) {
الرقم + = format.subString (نهاية + 1) ؛
}
// استبدال العناصر النائبة الرمزية
if (isCurrency || ispercent) {
القيمة = فارغة ؛
لـ (idx = 0 ، طول = number.length ؛ idx <length ؛ idx ++) {
ch = number.charat (idx) ؛
القيمة += (ch === "$" || ch === "٪")؟ الرمز: الفصل
}
الرقم = القيمة ؛
}
الطول = الحرفية. الطول ؛
إذا (الطول) {
لـ (idx = 0 ؛ idx <length ؛ idx ++) {
الرقم = number.replace (العنصر الوطني ، الحرفي [idx]) ؛
}
}
}
رقم الإرجاع ؛
}
var round = function (value ، precision) {
الدقة = الدقة || 0 ؛
value = value.toString (). split ('e') ؛
value = math.round ( + (value [0] + 'e' + (value [1]؟ ( + value [1] + precision): precision))) ؛
value = value.toString (). split ('e') ؛
value = + (value [0] + 'e' + (value [1]؟ ( + value [1] - Precision): -redrecision)) ؛
قيمة الإرجاع. tofixed (الدقة) ؛
} ؛
var tostring = function (القيمة ، fmt ، الثقافة) {
إذا (fmt) {
if (typeof value === number) {
إرجاع formatnumber (القيمة ، FMT ، الثقافة) ؛
}
}
قيمة الإرجاع! == غير محددة؟ قيمة : ""؛
} ؛
if (العالمية &&! العالمية. تحميل) {
tostring = وظيفة (القيمة ، التنسيق ، الثقافة) {
if ($ .isplainObject (ثقافة)) {
الثقافة = الثقافة. اسم ؛
}
إرجاع العلمانية.
} ؛
}
Chopper.Format = function (fmt) {
VAR القيم = الوسائط ؛
return fmt.replace (formatregexp ، وظيفة (مطابقة ، فهرس ، placeholderformat) {
var value = القيم [parseint (الفهرس ، 10) + 1] ؛
إرجاع toString (القيمة ، نائب المدير التنفيذي؟ النحاس.
}) ؛
} ؛
}) () ؛
</script>
</body>
</html>
API:
نسخة الكود كما يلي:
Chopper.format ('{0} يلعب {1}' ، 'xiaoming' ، 'Basketball') ؛ // المخرجات "Xiaoming تلعب كرة السلة"
// سعر
Chopper.format ('{0: c} - {1: c}' ، 10 ، 20) ؛ // مخرجات "10.00−20.00"
// فِهرِس
Chopper.format ('index: {0: e}' ، 25) ؛ // مخرجات "الفهرس: 2.5e+1"
// في المئة
Chopper.Format ('٪: {0: p}' ، 25) ؛ // المخرجات "في المئة: 2500.00 ٪"
// عشرية
Chopper.format ('decimal: {0: n}' ، 25) ؛ // المخرجات "عشرية: 25.00"
ملخص:
غالبًا ما يتم استخدام بيانات التنسيق في التطوير. على سبيل المثال ، نحتاج إلى مطالبة المعلومات المختلفة وفقًا للمتغيرات ، ولكن قوالب المحتوى هي نفسها ، حتى نتمكن من استخدام هذه الطريقة. إذا كان مشروعك يستخدم jQuery ، فيمكنك أيضًا تغليف JavaScript أعلاه في مكون إضافي jQuery.