Funcion sprintf en Javascript

Miercoles, Septiembre 19th, 2007

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

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



Tu banner aquí

Recibir Artículos Por Email