205 Stimmen

Äquivalent von String.format in jQuery

Ich versuche, einige JavaScript-Code von MicrosoftAjax zu JQuery zu verschieben. Ich verwende die JavaScript-Äquivalente in MicrosoftAjax der beliebten .net-Methoden, z. B. String.format(), String.startsWith(), etc. Gibt es Äquivalente zu diesen Methoden in JQuery?

194voto

Josh Stodola Punkte 79569

El Quellcode für ASP.NET AJAX ist verfügbar zu Ihrer Referenz, so dass Sie sie durchsehen und die Teile, die Sie weiter verwenden möchten, in eine separate JS-Datei aufnehmen können. Oder Sie können sie nach jQuery portieren.

Hier ist die Formatfunktion...

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;
}

Und hier sind die Prototyp-Funktionen endsWith und startsWith...

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);
}

155voto

adamJLev Punkte 13305

Dies ist eine schnellere/einfachere (und prototypische) Variante der Funktion, die Josh veröffentlicht hat:

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;
};

Verwendung:

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

Ich benutze diese Funktion so oft, dass ich sie einfach in f verwenden, aber Sie können auch die ausführlichere format . z.B.. 'Hello {0}!'.format(name)

133voto

gpvos Punkte 2592

Viele der oben genannten Funktionen (außer der von Julian Jelfs) enthalten den folgenden Fehler:

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

Oder für die Varianten, die vom Ende der Argumentliste rückwärts zählen:

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

Hier ist eine korrekte Funktion. Es handelt sich um eine prototypische Variante des Codes von Julian Jelfs, den ich ein bisschen straffer gemacht habe:

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

Und hier ist eine etwas fortgeschrittenere Version desselben, die es Ihnen ermöglicht, Klammern durch Verdoppelung zu umgehen:

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

Dies funktioniert korrekt:

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

Hier ist eine weitere gute Implementierung von Blair Mitchelmore, mit einer Reihe von netten Zusatzfunktionen: https://web.archive.org/web/20120315214858/http://blairmitchelmore.com/javascript/string.format

50voto

ianj Punkte 734

Eine Formatfunktion erstellt, die entweder eine Sammlung oder ein Array als Argumente akzeptiert

Verwendung:

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

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

Code:

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];
    });
};

36voto

rsenna Punkte 11310

Es gibt eine (einigermaßen) offizielle Option: jQuery.validator.format .

Wird mit jQuery Validation Plugin 1.6 (mindestens) geliefert.
Ganz ähnlich wie bei der String.Format in .NET gefunden.

bearbeiten Fehlerhafter Link korrigiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X