2415 Stimmen

JavaScript-Äquivalent zu printf/String.Format

Ich bin auf der Suche nach einem guten JavaScript-Äquivalent der C/PHP printf() oder für C#/Java-Programmierer, String.Format() ( IFormatProvider für .NET).

Meine Grundanforderung ist ein Tausendertrennzeichenformat für Zahlen für jetzt, aber etwas, das viele Kombinationen (einschließlich Daten) verarbeitet, wäre gut.

Ich weiß, dass Microsofts Ajax Bibliothek bietet eine Version von String.Format() aber wir wollen nicht den gesamten Overhead dieses Rahmens haben.

2voto

jerone Punkte 15200

Ich habe nicht gesehen, dass die String.format Variante:

String.format = function (string) {
    var args = Array.prototype.slice.call(arguments, 1, arguments.length);
    return string.replace(/{(\d+)}/g, function (match, number) {
        return typeof args[number] != "undefined" ? args[number] : match;
    });
};

1voto

NISHANK KUMAR Punkte 389
String.prototype.format = function(){
    var final = String(this);
    for(let i=0; i<arguments.length;i++){
        final = final.replace(`%s${i+1}`, arguments[i])
    }
    return final || ''
}

console.log(("hello %s2 how %s3 you %s1").format('hi', 'hello', 'how'));

<h1 id="text">

</h1>

1voto

Jens Törnell Punkte 20500

Ich verwende den Ansatz der wörtlichen Vorlage, wie unten dargestellt:

export const messages = {
  foo: (arg1, arg2) => `Hello ${arg1} ${arg2}`,
  bar: (arg1) => `Hello ${arg1}`,
}

Aus der Datei:

console.log(messages.foo('Bar', 'World'))
console.log(messages.bar('Foo'))

1voto

qbolec Punkte 5016

Ich brauchte eine Funktion, die einen Preis (in Cent) auf eine vom Benutzer bevorzugte Art und Weise formatieren kann, und das Schwierige daran ist, dass das Format vom Benutzer festgelegt wird - und ich erwarte nicht, dass meine Benutzer eine printf-ähnliche Syntax oder Regexps usw. verstehen. Meine Lösung ähnelt in gewisser Weise der in Basic verwendeten, so dass der Benutzer z. B. nur mit # Stellen für Ziffern markiert:

simple_format(1234567,"$ ###,###,###.##")
"$ 12,345.67"
simple_format(1234567,"### ### ###,## pln")
"12 345,67 pln"

Ich glaube, das ist für den Benutzer recht einfach zu verstehen und auch recht einfach zu implementieren:

function simple_format(integer,format){
  var text = "";
  for(var i=format.length;i--;){
    if(format[i]=='#'){
      text = (integer%10) + text;
      integer=Math.floor(integer/10);
      if(integer==0){
        return format.substr(0,i).replace(/#(.*#)?/,"")+text;
      }
    }else{
      text = format[i] + text;
    }
  }
  return text;
}

1voto

Mehmet Aydemir Punkte 9

arg Funktion:

/**
 * Qt stil arg()
 * var scr = "<div id='%1' class='%2'></div>".arg("mydiv").arg("mydivClass");
 */
String.prototype.arg = function() {
    var signIndex = this.indexOf("%");
    var result = this;
    if (signIndex > -1 && arguments.length > 0) {
        var argNumber = this.charAt(signIndex + 1);
        var _arg = "%"+argNumber;
        var argCount = this.split(_arg);
        for (var itemIndex = 0; itemIndex < argCount.length; itemIndex++) {
            result = result.replace(_arg, arguments[0]);
        }
    }
    return result;
}

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