printf / String.Format에 해당하는 JavaScript 동등한 JavaScript를 찾고 있습니다. 내 기본 요구 사항은

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에서의 어떤 강제 argumentsArray원래 아닌지 여부, 그리고이 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

참조 페이지

JS 번호 형식에 대한 빠른 자습서

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")