187 votes

convertir '1' en '0001' en JavaScript

Duplicata possible :
Existe-t-il une fonction JavaScript permettant de compléter une chaîne de caractères pour atteindre une longueur déterminée ?

Comment puis-je convertir '1' en '0001' en JavaScript sans utiliser de bibliothèques tierces ? Je l'ai fait en php en utilisant spritf : $time = sprintf('%04.0f',$time_arr[$i]);

0 votes

C'est la seule condition pour transformer 1 en 0001 ou bien est-il nécessaire d'ajouter 4 chiffres à toutes les chaînes de caractères, en utilisant des zéros comme caractères de remplacement ? C'est ce que vous semblez demander.

0 votes

Je veux convertir toutes les chaînes de caractères en 4 chiffres en utilisant les '0' comme caractères de remplacement.

5 votes

La meilleure et la plus intelligente des réponses sur stackoverflow.com/questions/13859538/ ("0000" + n).slice(-4)

410voto

C'est une petite astuce astucieuse (que je crois avoir déjà vue sur SO) :

var str = "" + 1
var pad = "0000"
var ans = pad.substring(0, pad.length - str.length) + str

JavaScript est plus indulgent que d'autres langages si le deuxième argument de substring est négatif, de sorte qu'il " déborde correctement " (ou incorrectement, selon la façon dont on le voit) :

C'est-à-dire, avec ce qui précède :

  • 1 -> "0001"
  • 12345 -> "12345"

La prise en charge des nombres négatifs est laissée comme un exercice ;-)

95voto

KooiInc Points 38845

Juste pour démontrer la flexibilité de javascript : vous pouvez utiliser un oneliner pour ceci

function padLeft(nr, n, str){
    return Array(n-String(nr).length+1).join(str||'0')+nr;
}
//or as a Number prototype method:
Number.prototype.padLeft = function (n,str){
    return Array(n-String(this).length+1).join(str||'0')+this;
}
//examples
console.log(padLeft(23,5));       //=> '00023'
console.log((23).padLeft(5));     //=> '00023'
console.log((23).padLeft(5,' ')); //=> '   23'
console.log(padLeft(23,5,'>>'));  //=> '>>>>>>23'

Si vous voulez l'utiliser pour les nombres négatifs également :

Number.prototype.padLeft = function (n,str) {
    return (this < 0 ? '-' : '') + 
            Array(n-String(Math.abs(this)).length+1)
             .join(str||'0') + 
           (Math.abs(this));
}
console.log((-23).padLeft(5));     //=> '-00023'

Alternative si vous ne voulez pas utiliser Array :

number.prototype.padLeft = function (len,chr) {
 var self = Math.abs(this)+'';
 return (this<0 && '-' || '')+
         (String(Math.pow( 10, (len || 2)-self.length))
           .slice(1).replace(/0/g,chr||'0') + self);
}

0 votes

Excellent candidat pour ma bibliothèque commons4js

14voto

kennebec Points 33886
String.prototype.padZero= function(len, c){
    var s= this, c= c || '0';
    while(s.length< len) s= c+ s;
    return s;
}

En dépit de son nom, vous pouvez utiliser le padding gauche avec n'importe quel caractère, y compris un espace. Je n'ai jamais eu l'utilité d'un padding à droite, mais ce serait assez facile.

2voto

Marcello Nuccio Points 3091

J'utilise l'objet suivant :

function Padder(len, pad) {
  if (len === undefined) {
    len = 1;
  } else if (pad === undefined) {
    pad = '0';
  }

  var pads = '';
  while (pads.length < len) {
    pads += pad;
  }

  this.pad = function (what) {
    var s = what.toString();
    return pads.substring(0, pads.length - s.length) + s;
  };
}

Il vous permet de définir facilement différents "paddings" :

var zero4 = new Padder(4);
zero4.pad(12); // "0012"
zero4.pad(12345); // "12345"
zero4.pad("xx"); // "00xx"
var x3 = new Padder(3, "x");
x3.pad(12); // "x12"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X