Funcion sprintf en Javascript

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


function sprintf()
{
if (!arguments || arguments.length < 1 || !RegExp) { return; } var str = arguments; var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/; var a = b = [], numSubstitutions = 0, numMatches = 0; while (a = re.exec(str)) { var leftpart = a, pPad = a, pJustify = a, pMinLength = a; var pPrecision = a, pType = a, rightPart = a; //alert(a + '\n' + , leftpart, pPad, pJustify, pMinLength, pPrecision); numMatches++; if (pType == '%') { subst = '%'; } else { numSubstitutions++; if (numSubstitutions >= arguments.length)
{
alert(‘Error! Not enough function arguments (‘ + (arguments.length – 1) + ‘, excluding the string)\nfor the number of substitution parameters in string (‘ + numSubstitutions + ‘ so far).’);
}
var param = arguments;
var pad = ”;
if (pPad && pPad.substr(0,1) == “‘”) pad = leftpart.substr(1,1);
else if (pPad) pad = pPad;
var justifyRight = true;
if (pJustify && pJustify === “-“) justifyRight = false;
var minLength = -1;
if (pMinLength) minLength = parseInt(pMinLength);
var precision = -1;
if (pPrecision && pType == ‘f’) precision = parseInt(pPrecision.substring(1));
var subst = param;
if (pType == ‘b’) subst = parseInt(param).toString(2);
else if (pType == ‘c’) subst = String.fromCharCode(parseInt(param));
else if (pType == ‘d’) subst = parseInt(param) ? parseInt(param) : 0;
else if (pType == ‘u’) subst = Math.abs(param);
else if (pType == ‘f’) subst = (precision > -1) ? Math.round(parseFloat(param) * Math.pow(10, precision)) / Math.pow(10, precision): parseFloat(param);
else if (pType == ‘o’) subst = parseInt(param).toString(8);
else if (pType == ‘s’) subst = param;
else if (pType == ‘x’) subst = (” + parseInt(param).toString(16)).toLowerCase();
else if (pType == ‘X’) subst = (” + parseInt(param).toString(16)).toUpperCase();
}
str = leftpart + subst + rightPart;
}
return str;
}
[/code]

Utilización:


var input = “’30’ -> decimal: %d / bin = %b / oct = %o / hex = %x / HEX = %X”;
var output = sprintf(input, 30, 30, 30, 30, 30);
[/code]

Enlace: sprintf and printf in Javascript

Vía: aNieto2k