Existe-t-il un équivalent JavaScript à printf() en PHP et String.Format() en Java ?
Le langage JavaScript ne fournit pas de méthode pour formater une chaîne de caractères et y insérer le contenu de variables. Mais il est possible de créer la sienne ou de faire appel à des librairies externes.
De nombreux langages possèdent des méthodes permettant de formater une chaîne de caractères pour y insérer le contenu de variables. C'est le cas par exemple du langage PHP avec la fonction sprintf() ou des langages C# et Java avec la fonction String.Format(). Le langage JavaScript ne fournit pas par défaut de méthode semblable mais il est possible de créer la sienne ou de faire appel à des librairies externes.
Pour réaliser cette opération, il faut créer une fonction qui récupère la liste des arguments. C'est possible en JavaScript avec le mot-clé arguments. La fonction va utiliser une expression régulière pour récupérer tous les chiffres entre accolades. Elle va ensuite vérifier si le chiffre a un argument correspondant. Si c'est le cas, le remplacement sera fait. Il existe deux possibilités pour implémenter cette fonction : la méthode String.prototype.format() va permettre d'appeler directement cette méthode à partir de la chaîne alors que la méthode String.format() va permettre d'obtenir la même écriture qu'en Java.
//On vérifie d'abord que la méthode n'existe pas déjà. 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 ; }); }; } //Utilisation alert("Coucou {0}, comment va {1} ? {2}").format("Paul", "Georges")); Résultat : "Coucou Paul, comment va Georges ? {2}" if (!String.format) { String.format = function(format) { //On enlève le premier argument car il s'agit de la chaîne dans laquelle remplacer les valeurs var args = Array.prototype.slice.call(arguments, 1); return format.replace(/{(d+)}/g, function(match, number) { return typeof args[number] != 'undefined' ? args[number] : match ; }); }; } //Utilisation alert(String.format("Coucou {0}, comment va {1} ? {2}", "Paul", "Georges")); Résultat : "Coucou Paul, comment va Georges ? {2}"
Une autre solution consiste à utiliser des librairies externes. La librairie sprintf.js ajoute la fonction sprintf dans votre code : https://github.com/alexei/sprintf.js.