[javascript] jQuery에서 String.format과 동일

JavaScript 코드를 MicrosoftAjax에서 JQuery로 옮기려고합니다. String.format (), String.startsWith () 등과 같이 널리 사용되는 .net 메소드의 MicrosoftAjax에서 JavaScript 등가물을 사용합니다. jQuery에도 이와 동등한 것이 있습니까?



답변

ASP.NET AJAX소스 코드는 참조 용으로 제공되므로이를 선택하여 계속 사용하려는 부분을 별도의 JS 파일에 포함시킬 수 있습니다. 또는 jQuery로 이식 할 수 있습니다.

포맷 기능은 다음과 같습니다.

String.format = function() {
  var s = arguments[0];
  for (var i = 0; i < arguments.length - 1; i++) {
    var reg = new RegExp("\\{" + i + "\\}", "gm");
    s = s.replace(reg, arguments[i + 1]);
  }

  return s;
}

그리고 여기 프로토 타입 함수로 끝과 끝이 있습니다 …

String.prototype.endsWith = function (suffix) {
  return (this.substr(this.length - suffix.length) === suffix);
}

String.prototype.startsWith = function(prefix) {
  return (this.substr(0, prefix.length) === prefix);
}


답변

이것은 Josh가 게시 한 기능의 더 빠르고 간단하고 프로토 타입입니다.

String.prototype.format = String.prototype.f = function() {
    var s = this,
        i = arguments.length;

    while (i--) {
        s = s.replace(new RegExp('\\{' + i + '\\}', 'gm'), arguments[i]);
    }
    return s;
};

용법:

'Added {0} by {1} to your collection'.f(title, artist)
'Your balance is {0} USD'.f(77.7) 

나는 이것을 너무 많이 사용하여 별명을 지정 f했지만 더 자세한 정보를 사용할 수도 있습니다 format. 예 :'Hello {0}!'.format(name)


답변

Julian Jelfs를 제외한 위의 많은 함수에는 다음 오류가 포함되어 있습니다.

js> '{0} {0} {1} {2}'.format(3.14, 'a{2}bc', 'foo');
3.14 3.14 afoobc foo

또는 인수 목록 끝에서 거꾸로 계산되는 변형의 경우 :

js> '{0} {0} {1} {2}'.format(3.14, 'a{0}bc', 'foo');
3.14 3.14 a3.14bc foo

다음은 올바른 기능입니다. Julian Jelfs 코드의 프로토 타입 변형으로 조금 더 빡빡했습니다.

String.prototype.format = function () {
  var args = arguments;
  return this.replace(/\{(\d+)\}/g, function (m, n) { return args[n]; });
};

그리고 여기에 약간 더 고급 버전이 있으며 중괄호를 두 배로 늘릴 수 있습니다.

String.prototype.format = function () {
  var args = arguments;
  return this.replace(/\{\{|\}\}|\{(\d+)\}/g, function (m, n) {
    if (m == "{{") { return "{"; }
    if (m == "}}") { return "}"; }
    return args[n];
  });
};

이것은 올바르게 작동합니다 :

js> '{0} {{0}} {{{0}}} {1} {2}'.format(3.14, 'a{2}bc', 'foo');
3.14 {0} {3.14} a{2}bc foo

다음은 Blair Mitchelmore의 또 다른 좋은 구현입니다. https://web.archive.org/web/20120315214858/http://blairmitchelmore.com/javascript/string.format


답변

컬렉션이나 배열을 인수로 취하는 형식 함수를 만들었습니다.

용법:

format("i can speak {language} since i was {age}",{language:'javascript',age:10});

format("i can speak {0} since i was {1}",'javascript',10});

암호:

var format = function (str, col) {
    col = typeof col === 'object' ? col : Array.prototype.slice.call(arguments, 1);

    return str.replace(/\{\{|\}\}|\{(\w+)\}/g, function (m, n) {
        if (m == "{{") { return "{"; }
        if (m == "}}") { return "}"; }
        return col[n];
    });
};


답변

jQuery.validator.format과 같은 공식 옵션이 있습니다.

jQuery Validation Plugin 1.6 (적어도)과 함께 제공됩니다. .NET
에서 String.Format발견 된 것과 매우 유사합니다 .

편집 깨진 링크를 수정했습니다.


답변

유효성 검사 플러그인을 사용하는 경우 다음을 사용할 수 있습니다.

jQuery.validator.format("{0} {1}", "cool", "formatting") = 'cool formatting'

http://docs.jquery.com/Plugins/Validation/jQuery.validator.format#templateargumentargumentN


답변

Q가 요구하는 것과 정확히 일치하지는 않지만 비슷하지만 번호가 아닌 명명 된 자리 표시자를 사용하는 것을 만들었습니다. 나는 개인적으로 명명 된 인수를 선호하고 객체를 인수로 보내면됩니다 (더 자세하지만 유지하기가 더 쉽습니다).

String.prototype.format = function (args) {
    var newStr = this;
    for (var key in args) {
        newStr = newStr.replace('{' + key + '}', args[key]);
    }
    return newStr;
}

사용법 예는 다음과 같습니다.

alert("Hello {name}".format({ name: 'World' }));