Contenido

Portando sprintf() a Javascript

15 Sep

+ 1

El otro día vimos que sprintf() puede ser una función en PHP muy interesante para la seguridad de nuestros scripts. Jan Moesen ha portado la función a javascript para que la podamos usar en el lado del cliente como si de la versión PHP fuera.

function sprintf() {
	if (!arguments || arguments.length < 1 || !RegExp) {
		return;
	}
	var str = arguments[0];
	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[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
		var pPrecision = a[5], pType = a[6], rightPart = a[7];
		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[numSubstitutions];
			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;
}

Modo de uso

var input = "'30' -> decimal: %d / bin = %b / oct = %o / hex = %x / HEX = %X";
alert(sprintf(input, 30, 30, 30, 30, 30));
  • Hola,estoy haciendo una web,sencilla en flash,pero tengo un grave problema,os explico,vamos a ver,parto de que va a ser visitada desde un link,entonces yo quiero saber quien me ha visitado desde ese link,ya que unos pueden entrar directos desde la url y otros a traves de ese link que esta en otra web,vale,pero ademas,tengo un carrito de la compra,y me gustaria saber si el que entro desde ese link hace algun pedido.
    Los archivos serian:
    El del link——-link1.html
    El del pedido—-pedido.html
    Es decir,me gustaria que hubiera algun javascript que cuando pinchen en el link que va ha entrar en mi web,se pegara directamente en la hoja de pedido,por si llega al carro de la compra y decide comprar.
    Miguel.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.