Funcion sprintf en Javascript

La función sprintf o printf es una de las funciones mas conocidas en la programación para el formato de cadenas. Y es que su uso puede ser de gran beneficio (dependiendo el caso) ya que nos puede ayudar entre otras cosas a mejorar la seguridad de nuestros programas (Andrés nos habla mas al respecto). Pues a Jan Moesen se le ha ocurrido la idea de portar la función sprintf a javascript basándose en la función sprintf de PHP.

sprintf() en javascript

  1. function sprintf()
  2.                 {
  3.                         if (!arguments || arguments.length < 1 || !RegExp)
  4.                         {
  5.                                 return;
  6.                         }
  7.                         var str = arguments[0];
  8.                         var re = /([^%]*)%(‘.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
  9.                         var a = b = [], numSubstitutions = 0, numMatches = 0;
  10.                         while (a = re.exec(str))
  11.                         {
  12.                                 var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
  13.                                 var pPrecision = a[5], pType = a[6], rightPart = a[7];
  14.                                
  15.                                 //alert(a + ‘\n’ + [a[0], leftpart, pPad, pJustify, pMinLength, pPrecision);
  16.  
  17.                                 numMatches++;
  18.                                 if (pType == ‘%’)
  19.                                 {
  20.                                         subst = ‘%’;
  21.                                 }
  22.                                 else
  23.                                 {
  24.                                         numSubstitutions++;
  25.                                         if (numSubstitutions >= arguments.length)
  26.                                         {
  27.                                                 alert(‘Error! Not enough function arguments (‘ + (arguments.length - 1) + ‘, excluding the string)\nfor the number of substitution parameters in string (‘ + numSubstitutions + ‘ so far).’);
  28.                                         }
  29.                                         var param = arguments[numSubstitutions];
  30.                                         var pad = ;
  31.                                                if (pPad && pPad.substr(0,1) == "’") pad = leftpart.substr(1,1);
  32.                                           else if (pPad) pad = pPad;
  33.                                         var justifyRight = true;
  34.                                                if (pJustify && pJustify === "-") justifyRight = false;
  35.                                         var minLength = -1;
  36.                                                if (pMinLength) minLength = parseInt(pMinLength);
  37.                                         var precision = -1;
  38.                                                if (pPrecision && pType == ‘f’) precision = parseInt(pPrecision.substring(1));
  39.                                         var subst = param;
  40.                                                if (pType == ‘b’) subst = parseInt(param).toString(2);
  41.                                           else if (pType == ‘c’) subst = String.fromCharCode(parseInt(param));
  42.                                           else if (pType == ‘d’) subst = parseInt(param) ? parseInt(param) : 0;
  43.                                           else if (pType == ‘u’) subst = Math.abs(param);
  44.                                           else if (pType == ‘f’) subst = (precision > -1) ? Math.round(parseFloat(param) * Math.pow(10, precision)) / Math.pow(10, precision): parseFloat(param);
  45.                                           else if (pType == ‘o’) subst = parseInt(param).toString(8);
  46.                                           else if (pType == ‘s’) subst = param;
  47.                                           else if (pType == ‘x’) subst = ( + parseInt(param).toString(16)).toLowerCase();
  48.                                           else if (pType == ‘X’) subst = ( + parseInt(param).toString(16)).toUpperCase();
  49.                                 }
  50.                                 str = leftpart + subst + rightPart;
  51.                         }
  52.                         return str;
  53.                 }

Utilización:

  1. var input = "’30′ -> decimal: %d / bin = %b / oct = %o / hex = %x / HEX = %X";
  2. var output = sprintf(input, 30, 30, 30, 30, 30);

Enlace: sprintf and printf in Javascript

Vía: aNieto2k


Fecha de publicación:  septiembre 19, 2007

Notas Relacionadas

dmedina

Fundador de WebAdictos.com.mx / Ingeniero en Sistemas / Desarrollador Web / Blogger / Estudiante de MGTI / apasionado por la tecnología y sobre todo adicto al internet. Puedes seguirme en Twitter @dmedina

#WEB  #TWITTER     Más Entradas de dmedina ➝