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