formater un nombre ou un texte JQuery JavaScript

Encore un casse tete en Javascript . Formater un nombre ou un texte en rajoutant un bourrage pour les nombre en rajoutant des z곯s au dꣵt bien sure ou pour les textes ajouter tout autre caract鳥s voici une fonction qui permet de formater (de bourrer ) un nombre ou un texte :
function padNumberOrString(toFormat , formatLength , pad) {
 var n=toFormat ;
 var formated="";
 //convertir en entier la longueur du format sinon prendre 0
 var ln=formatLength/1||0;
 //calculer le bourrage
 var padding=new Array(ln).join(pad||"0");
 if( ! isNaN( n/1) ){
 // pour les nombre
 //extraire la partie decimale entiere et la formater 
 formated= n.toString().replace(/([-]?)([0-9]*)(\.?[0-9]*)/,
        function(c, p1, p2, p3 ){
         var l=ln - p2.length;
         if(l>0){
          p2=(padding.slice(0, l) + p2);
         }
          return [p1, p2, p3].join('');
        });
    }else{
     //sinon c est du  texte 
      formated=  (padding.slice(0, ln - n.length) + n);
     }
    return formated;
  }
Cette fonction peut etre appelee comme suit :
padNumberOrString(-1.23,4) //: Obtient  -0001.23
padNumberOrString("-1.23",4) //: Obtient  -0001.23
padNumberOrString(10,2) //: Obtient  10
padNumberOrString(10,1) //: Obtient  10
padNumberOrString(10,4,"#") //: Obtient  ##10
padNumberOrString("Texte",8,"#") //: Obtient  ###Texte
Et en voici une version plus compacte de la fonction qui ne prends pas en charge la partie des decimale s il y a biensure cela dependra du besoin
 
function padNumberOrString(toPad, formatLength,pad) {
    var minus = '';
    var pad=pad||'0';
    if (toPad < 0) {
   minus =  '-';
   toPad = -toPad;
    }
    toPad = '' + toPad;
    while(toPad.length < formatLength) toPad = pad + toPad;
    return minus + num;
  }
padNumberOrString(-1.23,4) //: Obtient  -1.23  la longueur totale
padNumberOrString("-1.23",4) //: Obtient  -1.23 idem ne tient pas compte de la partie decimale
padNumberOrString("-1.23",5) //: Obtient  -01.23 
padNumberOrString(10,2) //: Obtient  10
padNumberOrString(10,1) //: Obtient  10
padNumberOrString(10,4,"#") //: Obtient  ##10
padNumberOrString("Texte",8,"#") //: Obtient  ###Texte
On voit que la methode precedente a bien ces limites : -Ne tient pas compte de la partie decimale On peut presenter un autre algorithme pour cette fonction voir comme ceci :

function padNumberOrString(toPad,formatLength){
   var minus=toPad<0?"-":"";
   toPad=toPad/1?Math.abs(toPad)+"": toPad; 
   formatLength=formatLength/1||toPad.length; 
   return minus + new Array(Math.max(formatLength ,toPad.length)-toPad.length+1).join("0")+toPad
  }  
  
Voici quelques tests
padNumberOrString(-1.23,4) //: Obtient  -1.23  la longueur totale
padNumberOrString("-1.23",4) //: Obtient  -1.23 idem ne tient pas compte de la partie decimale
padNumberOrString("-1.23",5) //: Obtient  -01.23 
padNumberOrString(10,2) //: Obtient  10
padNumberOrString(10,1) //: Obtient  10
padNumberOrString(10,4,"#") //: Obtient  ##10
padNumberOrString("Texte",8,"#") //: Obtient  ###Texte
On voit bien que cette methode presente un algorithme plus compact elle tient compte de la partie negative en cas de nombre mais ignore toujours la partie decimale Enfin voila une autre methode plus complete :

function padNum2(toPad,formatLength,includeDecimal){ 

   function padCallBack(str ,minus,integer,separator, decimal){
   
   var ln=includeDecimal?str.length:integer.length
   
   formatLength=formatLength/1||ln;
   
   var zeropadLn=Math.max(formatLength,ln)-ln+1;
   
            var formated=new Array(zeropadLn).join("0")+integer;
   
  return  minus+ formated+separator+decimal;
   }
 return toPad/1
                  ?toPad.toString().replace(/^(-?)(\d*)([\.|,]?)(\d*)$/g, padCallBack)
                 :padCallBack(toPad,"",toPad,"","");
} 

padNumberOrString(-1.23,4) //: Obtient  -1.23  la longueur totale
padNumberOrString(-1.23,4,true) //: Obtient  -0001.23 que la partie entiere
padNumberOrString("-1.23",4) //: Obtient  -1.23 ne tient pas compte de la partie decimale
padNumberOrString("-1.23",5) //: Obtient  -01.23 
padNumberOrString(10,2) //: Obtient  10
padNumberOrString(10,1) //: Obtient  10
padNumberOrString(10,4,true) //: Obtient  0010
padNumberOrString(4e2,4,true) //: Obtient  0400
padNumberOrString("Texte",8) //: Obtient  000Texte
On voit que cette methode tient compte a la fois de la partie decimale grace au parametre includeDecimal de la partie et entiere , ansi que signe moins et de nombre flottants (4e10).

0 commentaires:

Enregistrer un commentaire