C / PHP printf()
또는 C # / Java 프로그래머 String.Format()
( IFormatProvider
.NET 용) 와 동등한 JavaScript를 찾고 있습니다.
내 기본 요구 사항은 현재 숫자에 대한 천 단위 구분 기호 형식이지만 많은 조합 (날짜 포함)을 처리하는 것이 좋습니다.
Microsoft의 Ajax 라이브러리는의 버전을 제공 String.Format()
하지만 해당 프레임 워크의 전체 오버 헤드를 원하지 않습니다.
답변
ES6부터는 템플릿 문자열을 사용할 수 있습니다.
let soMany = 10;
console.log(`This is ${soMany} times easier!`);
// "This is 10 times easier!
자세한 내용은 아래 의 Kim 답변을 참조하십시오.
그렇지 않으면:
JavaScript는 sprintf () 사용해보십시오 .
실제로 간단한 형식 방법을 원한다면 교체를 연속적으로 수행하지 말고 동시에 수행하십시오.
이전의 대체 문자열이 다음과 같은 형식 순서를 포함 할 때 언급 된 대부분의 다른 제안이 실패하기 때문에 :
"{0}{1}".format("{1}", "{0}")
일반적으로 출력은 예상 {1}{0}
되지만 실제 출력은 {1}{1}
입니다. 따라서 fearphage의 제안 에서와 같이 동시에 교체하십시오 .
답변
이전에 제안 된 솔루션을 기반으로 :
// First, checks if it isn't implemented yet.
if (!String.prototype.format) {
String.prototype.format = function() {
var args = arguments;
return this.replace(/{(\d+)}/g, function(match, number) {
return typeof args[number] != 'undefined'
? args[number]
: match
;
});
};
}
"{0} is dead, but {1} is alive! {0} {2}".format("ASP", "ASP.NET")
출력
ASP는 죽었지 만 ASP.NET은 살아 있습니다! ASP {2}
String
의 프로토 타입 을 수정하지 않으려는 경우 :
if (!String.format) {
String.format = function(format) {
var args = Array.prototype.slice.call(arguments, 1);
return format.replace(/{(\d+)}/g, function(match, number) {
return typeof args[number] != 'undefined'
? args[number]
: match
;
});
};
}
훨씬 더 친숙합니다.
String.format('{0} is dead, but {1} is alive! {0} {2}', 'ASP', 'ASP.NET');
같은 결과로 :
ASP는 죽었지 만 ASP.NET은 살아 있습니다! ASP {2}
답변
Stack Overflow에는 실제로 String
라는 프로토 타입에 대한 자체 서식 기능이 있기 때문에 재미 formatUnicorn
있습니다. 시도 해봐! 콘솔로 이동하여 다음과 같이 입력하십시오.
"Hello, {name}, are you feeling {adjective}?".formatUnicorn({name:"Gabriel", adjective: "OK"});
이 출력을 얻습니다.
Hello, Gabriel, are you feeling OK?
객체, 배열 및 문자열을 인수로 사용할 수 있습니다! 코드를 가져 와서 새 버전의 버전을 생성하기 위해 다시 작업했습니다 String.prototype.format
.
String.prototype.formatUnicorn = String.prototype.formatUnicorn ||
function () {
"use strict";
var str = this.toString();
if (arguments.length) {
var t = typeof arguments[0];
var key;
var args = ("string" === t || "number" === t) ?
Array.prototype.slice.call(arguments)
: arguments[0];
for (key in args) {
str = str.replace(new RegExp("\\{" + key + "\\}", "gi"), args[key]);
}
}
return str;
};
영리한 Array.prototype.slice.call(arguments)
호출에 주목하십시오. 즉, 단일 JSON 스타일 객체가 아닌 문자열 또는 숫자 인수를 던지면 C #의 String.Format
동작이 거의 정확하게 나타납니다.
"a{0}bcd{1}ef".formatUnicorn("foo", "bar"); // yields "aFOObcdBARef"
때문에의 그 Array
들 ‘ slice
에서의 어떤 강제 arguments
에 Array
원래 아닌지 여부, 그리고이 key
때문에, 예를 들어, “0”(문자열 강요 각 배열 요소의 인덱스 (0, 1, 2, …)입니다 "\\{0\\}"
첫 정규 표현식 패턴).
산뜻한.
답변
JavaScript에서 숫자 서식
다른 라이브러리를 도입하지 않고 JavaScript에서 숫자의 서식을 지정하는 방법을 찾고자하는이 질문 페이지에 도달했습니다 . 내가 찾은 것은 다음과 같습니다.
반올림 부동 소수점 숫자
sprintf("%.2f", num)
JavaScript에서 이에 상응하는 것은 반올림으로 소수점 이하 2 자리로 num.toFixed(2)
형식화 num
됩니다 (그러나 Math.round
아래 에 대한 @ ars265의 의견 참조).
(12.345).toFixed(2); // returns "12.35" (rounding!)
(12.3).toFixed(2); // returns "12.30" (zero padding)
지수 형태
동등한 sprintf("%.2e", num)
IS num.toExponential(2)
.
(33333).toExponential(2); // "3.33e+4"
16 진법 및 기타 기반
기본 B의 숫자를 인쇄하려면을 시도하십시오 num.toString(B)
. JavaScript는베이스 2에서 36까지의 자동 변환을 지원합니다 (또한 일부 브라우저는 base64 인코딩에 대한 지원 이 제한되어 있습니다 ).
(3735928559).toString(16); // to base 16: "deadbeef"
parseInt("deadbeef", 16); // from base 16: 3735928559
참조 페이지
toFixed ()에 대한 Mozilla 참조 페이지 ( toPrecision (), toExponential (), toLocaleString () 등에 대한 링크 포함)
답변
ES6부터는 템플릿 문자열을 사용할 수 있습니다 .
let soMany = 10;
console.log(`This is ${soMany} times easier!`);
// "This is 10 times easier!
템플릿 문자열은 (작은) 따옴표 대신 백틱으로 묶습니다.
자세한 정보 :
https://developers.google.com/web/updates/2015/01/ES6-Template-Strings
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings
참고 : 지원되는 브라우저 목록을 찾으려면 mozilla 사이트를 확인하십시오.
답변
jsxt, 지포
이 옵션이 더 적합합니다.
String.prototype.format = function() {
var formatted = this;
for (var i = 0; i < arguments.length; i++) {
var regexp = new RegExp('\\{'+i+'\\}', 'gi');
formatted = formatted.replace(regexp, arguments[i]);
}
return formatted;
};
이 옵션을 사용하면 다음과 같은 문자열을 바꿀 수 있습니다.
'The {0} is dead. Don\'t code {0}. Code {1} that is open source!'.format('ASP', 'PHP');
코드를 사용하면 두 번째 {0}이 (가) 대체되지 않습니다. 😉
답변
이 간단한 기능을 사용합니다.
String.prototype.format = function() {
var formatted = this;
for( var arg in arguments ) {
formatted = formatted.replace("{" + arg + "}", arguments[arg]);
}
return formatted;
};
이는 string.format과 매우 유사합니다.
"{0} is dead, but {1} is alive!".format("ASP", "ASP.NET")