86 votes

Ajouter des zéros supplémentaires devant un nombre à l'aide de jQuery ?

J'ai des fichiers qui sont téléchargés et qui sont formatés comme suit

MR 1

MR 2

MR 100

MR 200

MR 300

ETC.

Ce que je dois faire, c'est ajouter deux 00 supplémentaires avant tout ce qui précède MR 10 et ajouter un 0 supplémentaire avant MR10-99.

Les fichiers sont donc formatés

MR 001

MR 010

MR 076

ETC.

Toute aide serait la bienvenue !

3 votes

jQuery ne vous aidera pas ici (du moins pas pour le formatage)... mais comment accédez-vous au fichier ? Comment obtenir son contenu ? D'une certaine manière, le contexte n'est pas clair. Veuillez fournir au moins un peu de code, afin que nous puissions mieux comprendre le problème.

0 votes

@FelixKling Les fichiers ne sont pas pertinents. Il pose des questions sur le formatage.

223voto

Todd Yandell Points 8515

En supposant que vous avez ces valeurs stockées dans des chaînes, essayez ceci :

function pad (str, max) {
  str = str.toString();
  return str.length < max ? pad("0" + str, max) : str;
}

pad("3", 3);    // => "003"
pad("123", 3);  // => "123"
pad("1234", 3); // => "1234"

var test = "MR 2";
var parts = test.split(" ");
parts[1] = pad(parts[1], 3);
parts.join(" "); // => "MR 002"

3 votes

Je sais que c'est vieux, mais cette fonction m'a aidé et j'ai pensé que je devais la compléter. Elle effectuera la conversion de type pour les variables entières ou flottantes, ce qui signifie que vous pouvez faire pad(85, 5) ainsi que pad("85", 5) . return (str).toString().length < max ? pad("0" + (str).toString(), max) : (str).toString();

7 votes

@RémiBreton Votre fonction utilise trop de fois .toString() . Je pense que ce serait mieux function pad (str, max) { str=str.toString(); function main(str,max){ return str.length < max ? main("0" + str, max) : str; } return main(str,max); }

2 votes

String.prototype.padLeft = function padLeft(length, leadingChar) { if (leadingChar === undefined) leadingChar = "0" ; return this.length < length ? (leadingChar + this).padLeft(length, leadingChar) : this ; } ;

38voto

Christopher Thomas Points 1174

J'ai une solution potentielle qui, je pense, est pertinente, je l'ai postée ici :

https://www.facebook.com/antimatterstudios/posts/10150752380719364

En fait, vous voulez une longueur minimale de 2 ou 3, vous pouvez ajuster le nombre de 0 que vous mettez dans ce morceau de code.

var d = new Date();
var h = ("0"+d.getHours()).slice(-2);
var m = ("0"+d.getMinutes()).slice(-2);
var s = ("0"+d.getSeconds()).slice(-2);

Je savais que j'obtiendrais toujours un seul nombre entier comme minimum (parce que heure 1, heure 2) etc., mais si vous ne pouvez pas être sûr d'obtenir autre chose qu'une chaîne vide, vous pouvez simplement faire "000"+d.getHours() pour être sûr d'obtenir le minimum.

alors vous voulez 3 chiffres ? utilisez simplement -3 au lieu de -2 dans mon code, j'écris juste ça parce que je voulais construire une horloge de 24 heures d'une manière super facile.

7voto

MadBender Points 1073
function addLeadingZeros (n, length)
{
    var str = (n > 0 ? n : -n) + "";
    var zeros = "";
    for (var i = length - str.length; i > 0; i--)
        zeros += "0";
    zeros += str;
    return n >= 0 ? zeros : "-" + zeros;
}

//addLeadingZeros (1, 3) =   "001"
//addLeadingZeros (12, 3) =  "012"
//addLeadingZeros (123, 3) = "123"

0 votes

En d'autres termes, convertissez-le en une chaîne de caractères, puis remplissage avec des zéros .

4voto

Davan Etelamaki Points 151

Il s'agit de la fonction que j'utilise généralement dans mon code pour ajouter des zéros à un nombre ou à une chaîne.

Les entrées sont la chaîne ou le nombre (str), et la longueur souhaitée de la sortie (len).

var PrependZeros = function (str, len) {
    if(typeof str === 'number' || Number(str)){
    str = str.toString();
    return (len - str.length > 0) ? new Array(len + 1 - str.length).join('0') + str: str;
}
else{
    for(var i = 0,spl = str.split(' '); i < spl.length; spl[i] = (Number(spl[i])&& spl[i].length < len)?PrependZeros(spl[i],len):spl[i],str = (i == spl.length -1)?spl.join(' '):str,i++);
    return str;
}

} ;

Exemples :

PrependZeros('MR 3',3);    // MR 003
PrependZeros('MR 23',3);   // MR 023
PrependZeros('MR 123',3);  // MR 123
PrependZeros('foo bar 23',3);  // foo bar 023

2voto

RobG Points 41170

Si vous vous séparez sur l'espace, vous pouvez ajouter des zéros de tête en utilisant une fonction simple comme celle-ci :

function addZeros(n) {
  return (n < 10)? '00' + n : (n < 100)? '0' + n : '' + n;
}

Vous pouvez donc tester la longueur de la chaîne et, si elle est inférieure à 6, la diviser sur l'espace, ajouter des zéros au nombre, puis la réunir à nouveau.

Ou comme une expression régulière :

function addZeros(s) {
  return s.replace(/ (\d$)/,' 00$1').replace(/ (\d\d)$/,' 0$1');
}

Je suis sûr que quelqu'un peut le faire avec un seul remplacement, pas deux.

Editer - exemples

alert(addZeros('MR 3'));    // MR 003
alert(addZeros('MR 23'));   // MR 023
alert(addZeros('MR 123'));  // MR 123
alert(addZeros('foo bar 23'));  // foo bar 023

Il mettra un ou deux zéros devant un nombre à la fin d'une chaîne avec un espace devant. Il ne se soucie pas du bit qui précède l'espace.

0 votes

Que se passe-t-il si, par exemple, un document a un MR 003, peut-on ignorer l'ajout des 0, etc.

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