포맷이란 포맷 작업을 통해 모든 유형의 데이터를 문자열로 변환하는 것입니다. 예를 들어 아래
다음은 자신의 프로젝트에 복사할 수 있는 완전한 코드입니다.
머리>
http://code.jquery.com/jquery-1.9.1.min.js">>
(함수() {
var 헬기 = window.chopper = window.chopper || { 문화: {} },
수학 = 수학,
formatRegExp = /{(d )(:[^}] )?}/g,
FUNCTION = "함수",
STRING = "문자열",
NUMBER = "숫자",
OBJECT = "객체",
NULL = "널",
BOOLEAN = "부울",
정의되지 않음 = "정의되지 않음",
슬라이스 = [].slice,
세계화 = window.Globalize,
StandardFormatRegExp = /^(n|c|p|e)(d*)$/i,
literalRegExp = /(
\.)|(['][^']*[']?)|(["][^"]*["]?)/g,
commaRegExp = /,/g,
비어 있음 = "",
POINT = ".",
쉼표 = ",",
SHARP = "#",
ZERO = "0",
자리 표시자 = "??",
EN = "en-US",
objectToString = {}.toString;
//문화
chuckper.cultures["en-US"] = {
이름: EN,
숫자형식: {
패턴: ["-n"],
소수점: 2,
",": ",",
".": ".",
그룹 크기: [3],
퍼센트: {
패턴: ["-n %", "n %"],
소수점: 2,
",": ",",
".": ".",
그룹 크기: [3],
기호: "%"
},
통화: {
패턴: ["($n)", "$n"],
소수점: 2,
",": ",",
".": ".",
그룹 크기: [3],
기호: "$"
}
},
달력: {
표준: {
일: {
이름: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"],
namesAbbr: ["일", "월", "화", "수", "목", "금", "토"],
namesShort: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ]
},
개월: {
이름: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월" ],
namesAbbr: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월" ]
},
오전: [ "오전", "오전", "오전" ],
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: "시:분 tt",
T: "h:mm:ss tt",
u: "yyyy'-'MM'-'dd HH':'mm':'ss'Z'",
y: "MMMM, yyyy",
Y: "MMMM, yyyy"
},
"/": "/",
":": ":",
첫 번째 날: 0,
twoDigitYearMax: 2029
}
}
};
함수 findCulture(문화) {
if (문화) {
if (culture.numberFormat) {
반품문화;
}
if (문화 유형 === STRING) {
var 문화 = 헬기.문화;
반환 문화[문화] || 문화[culture.split("-")[0]] || null;
}
null을 반환합니다.
}
null을 반환합니다.
}
함수 getCulture(문화) {
if (문화) {
문화 = findCulture(문화);
}
반환 문화 || 헬기.문화.현재;
}
함수 ExpandNumberFormat(numberFormat) {
numberFormat.groupSizes = numberFormat.groupSize;
numberFormat.percent.groupSizes = numberFormat.percent.groupSize;
numberFormat.currency.groupSizes = numberFormat.currency.groupSize;
}
헬기.culture = function(cultureName) {
var 문화 = 헬기.문화, 문화;
if (cultureName !== 정의되지 않음) {
문화 = findCulture(cultureName) || 문화[EN];
culture.calendar=culture.calendars.standard;
cultures.current=문화;
if (세계화 && !globalize.load) {
ExpandNumberFormat(culture.numberFormat);
}
} 그 밖의 {
문화 반환.현재;
}
};
Chopper.culture(EN);
//숫자 서식
함수 formatNumber(숫자, 형식, 문화권) {
문화 = getCulture(문화);
var numberFormat =culture.numberFormat,
groupSize = numberFormat.groupSize[0],
groupSeparator = numberFormat[COMMA],
십진수 = 숫자형식[POINT],
정밀도 = numberFormat.decimals,
패턴 = numberFormat.pattern[0],
리터럴 = [],
기호
isCurrency, isPercent,
맞춤정밀,
형식과 정밀도,
음수 = 숫자 < 0,
정수,
분수,
정수길이,
분수길이,
교체 = 비어 있음,
값 = 비어 있음,
idx
길이
쯧,
해즈그룹
hasNegativeFormat,
소수지수,
샤프인덱스,
제로인덱스,
hasZero, hasSharp,
퍼센트지수,
통화지수,
startZeroIndex,
시작 = -1,
끝;
//숫자가 없으면 빈 문자열을 반환
if (숫자 === 정의되지 않음) {
비어 있음을 반환합니다.
}
if (!isFinite(숫자)) {
반품번호;
}
//형식이 없으면 number.toString()을 반환하고,culture.name이 정의되지 않은 경우 number.toLocaleString()을 반환합니다
if (!format) {
문화.이름.길이를 반환합니까? number.toLocaleString() : number.toString();
}
formatAndPrecision = StandardFormatRegExp.exec(형식);
// 표준 형식
if (formatAndPrecision) {
형식 = formatAndPrecision[1].toLowerCase();
isCurrency = 형식 === "c";
isPercent = 형식 === "p";
if (isCurrency || isPercent) {
//형식이 통화 또는 퍼센트인 경우 특정 숫자 형식 정보 가져오기
numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;
groupSize = numberFormat.groupSize[0];
groupSeparator = numberFormat[COMMA];
십진수 = 숫자형식[POINT];
정밀도 = numberFormat.decimals;
기호 = numberFormat.symbol;
패턴 = numberFormat.pattern[부정적인 ? 0 : 1];
}
customPrecision = formatAndPrecision[2];
if (customPrecision) {
정밀도 = customPrecision;
}
//지수 형식으로 숫자를 반환합니다
if (형식 === "e") {
customPrecision을 반환하시겠습니까? number.toExponential(정밀도) : number.toExponential(); // FF #653438에서는 toExponential()과 toExponential(undefine)이 다릅니다.
}
// 형식이 백분율인 경우 곱하기
if (isPercent) {
숫자 *= 100;
}
숫자 = 라운드(숫자, 정밀도);
음수 = 숫자 < 0;
숫자 = 숫자.분할(POINT);
정수 = 숫자[0];
분수 = 숫자[1];
//숫자가 음수이면 "-"를 제외합니다.
if (부정) {
정수 = 정수.하위 문자열(1);
}
값 = 정수;
정수길이 = 정수.길이;
//길이가 충분히 길면 숫자에 그룹 구분 기호를 추가하세요
if (integerLength >= groupSize) {
값 = 비어 있음;
for (idx = 0; idx < 정수 길이; idx ) {
if (idx > 0 && (integerLength - idx) % groupSize === 0) {
값 = groupSeparator;
}
값 = 정수.charAt(idx);
}
}
if (분수) {
값 = 소수;
}
if (형식 === "n" && !부정) {
반환값;
}
숫자 = 비어 있음;
for (idx = 0, 길이 = 패턴.길이; idx < 길이; idx ) {
ch = 패턴.charAt(idx);
if (ch === "n") {
숫자 = 값;
} else if (ch === "$" || ch === "%") {
숫자 = 기호;
} 그 밖의 {
번호 = ch;
}
}
반품번호;
}
//사용자 정의 형식
//
//섹션별로 형식을 구분합니다.
//숫자를 양수로 만듭니다
if (부정) {
숫자 = -숫자;
}
if (format.indexOf("'") > -1 || format.indexOf(""") > -1 || format.indexOf("\") > -1) {
format = format.replace(literalRegExp, 함수(일치) {
var quoteChar = match.charAt(0).replace("\", ""),
리터럴 = match.slice(1).replace(quoteChar, "");
literals.push(리터럴);
자리 표시자를 반환합니다.
});
}
형식 = 형식.split(";");
if (음수 && 형식[1]) {
//음수 형식 가져오기
형식 = 형식[1];
hasNegativeFormat = true;
} else if (숫자 === 0) {
//0의 형식
형식 = 형식[2] || 형식[0];
if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {
//문자열 상수인 경우 형식을 반환합니다.
반환 형식;
}
} 그 밖의 {
형식 = 형식[0];
}
PercentIndex = format.indexOf("%");
currencyIndex = format.indexOf("$");
isPercent = 퍼센트 인덱스 != -1;
isCurrency = 통화 인덱스 != -1;
//형식에 퍼센트가 있는 경우 숫자를 곱합니다
if (isPercent) {
숫자 *= 100;
}
if (isCurrency && format[currencyIndex - 1] === "\") {
형식 = format.split("
\").join("");
isCurrency = false;
}
if (isCurrency || isPercent) {
//형식이 통화 또는 퍼센트인 경우 특정 숫자 형식 정보 가져오기
numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;
groupSize = numberFormat.groupSize[0];
groupSeparator = numberFormat[COMMA];
십진수 = 숫자형식[POINT];
정밀도 = numberFormat.decimals;
기호 = numberFormat.symbol;
}
hasGroup = format.indexOf(COMMA) > -1;
if (hasGroup) {
형식 = format.replace(commaRegExp, EMPTY);
}
소수 인덱스 = format.indexOf(POINT);
길이 = 형식.길이;
if (decimalIndex != -1) {
분수 = number.toString().split("e");
if (분수[1]) {
분수 = 라운드(숫자, Math.abs(fraction[1]));
} 그 밖의 {
분수 = 분수[0];
}
분수 = Fraction.split(POINT)[1] || 비어 있음;
zeroIndex = format.lastIndexOf(ZERO) - 소수 인덱스;
SharpIndex = format.lastIndexOf(SHARP) - 소수 인덱스;
hasZero = zeroIndex > -1;
hasSharp = 샤프인덱스 > -1;
idx = 분수.길이;
if (!hasZero && !hasSharp) {
형식 = 형식.하위 문자열(0, 소수 인덱스) 형식.하위 문자열(소수 인덱스 1);
길이 = 형식.길이;
소수점 인덱스 = -1;
idx = 0;
} if (hasZero && zeroIndex > SharpIndex) {
idx = zeroIndex;
} else if (sharpIndex > zeroIndex) {
if (hasSharp && idx > SharpIndex) {
idx = 샤프인덱스;
} else if (hasZero && idx < zeroIndex) {
idx = zeroIndex;
}
}
if (idx > -1) {
숫자 = 라운드(숫자, idx);
}
} 그 밖의 {
숫자 = 라운드(숫자);
}
SharpIndex = format.indexOf(SHARP);
startZeroIndex = zeroIndex = format.indexOf(ZERO);
//첫 번째 숫자 자리 표시자의 인덱스 정의
if (sharpIndex == -1 && zeroIndex != -1) {
시작 = zeroIndex;
} else if (sharpIndex != -1 && zeroIndex == -1) {
시작 = SharpIndex;
} 그 밖의 {
시작 = 샤프인덱스 > 제로인덱스? zeroIndex : 샤프인덱스;
}
SharpIndex = format.lastIndexOf(SHARP);
zeroIndex = format.lastIndexOf(ZERO);
//마지막 숫자 자리 표시자의 인덱스 정의
if (sharpIndex == -1 && zeroIndex != -1) {
end = zeroIndex;
} else if (sharpIndex != -1 && zeroIndex == -1) {
end = 샤프인덱스;
} 그 밖의 {
end = 샤프인덱스 > 제로인덱스? 샤프인덱스 : 제로인덱스;
}
if (시작 == 길이) {
끝 = 시작;
}
if (시작 != -1) {
값 = number.toString().split(POINT);
정수 = 값[0];
분수 = 값[1] || 비어 있음;
정수길이 = 정수.길이;
분수 길이 = 분수.길이;
if (음수 && (숫자 * -1) >= 0) {
부정 = 거짓;
}
//길이가 충분히 길면 숫자에 그룹 구분 기호를 추가하세요
if (hasGroup) {
if (정수 길이 === 그룹 크기 && 정수 길이 < 십진수 인덱스 - startZeroIndex) {
정수 = groupSeparator 정수;
} else if (integerLength > groupSize) {
값 = 비어 있음;
for (idx = 0; idx < 정수 길이; idx ) {
if (idx > 0 && (integerLength - idx) % groupSize === 0) {
값 = groupSeparator;
}
값 = 정수.charAt(idx);
}
정수 = 값;
}
}
숫자 = format.substring(0, 시작);
if (음수 && !hasNegativeFormat) {
숫자 = "-";
}
for (idx = 시작; idx < 길이; idx ) {
ch = format.charAt(idx);
if (decimalIndex == -1) {
if (end - idx < 정수 길이) {
숫자 = 정수;
휴식;
}
} 그 밖의 {
if (zeroIndex != -1 && zeroIndex < idx) {
교체 = 비어 있음;
}
if ((decimalIndex - idx) <= 정수 길이 && 소수 인덱스 - idx > -1) {
숫자 = 정수;
idx = 십진수 인덱스;
}
if (decimalIndex === idx) {
숫자 = (분수 ? 소수 : EMPTY) 분수;
idx = end - 소수점 인덱스 1;
계속;
}
}
if (ch === ZERO) {
번호 = ch;
교체 = ch;
} else if (ch === SHARP) {
숫자 = 대체;
}
}
if (끝 >= 시작) {
숫자 = format.substring(end 1);
}