Ver Mensaje Individual
  #11 (permalink)  
Antiguo 26/09/2007, 17:33
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 2 meses
Puntos: 45
Re: 36.- Sumar meses a una fecha

Sí, ese sería el problema del código.

Intenta poner el código para que no funcione la sustitución con lo que ya has sustituido (en el ejemplo que posteas, valdría con cambiar de orden los replace()).

Si no puedes hacer eso... veo la cosa más complicada. Ten en cuenta que la programación en javascript es secuencial, y que cada sentencia se ejecuta por orden. Es decir, lo que haga la anterior está disponible para la siguiente. No puedes ejecutar dos sentencias a la vez que es lo que necesitas.


Es que este problema se me planteó desde el primer momento que posteaste tu duda. Con las expresiones regulares, una vez que miras un caracter, ya sigues hacia delante y no lo vuelves a comprobar. Podría ser como un bucle que va comprobando caracter por caracter (también se podría hacer con este bucle).

Este ejemplo funciona para la primera "a" (se sustituye por b). Luego si introduces otra letra, hará otra pasada y esta nueva "b" se sustituirá por "c":

Código PHP:
<input type="text" onkeyup="sustituir(this)" />

<
script type="text/javascript">

var 
reemplazos = {
    
"a""b",
    
"b""c"
};

function 
sustituir(campo) {
    
campo.value campo.value.replace( /[a-z]/g, function($1) {
        return 
reemplazos[$1] || $1;
    } );
}

</script> 
Lo que sí podríamos hacer es "engañar", detectando la tecla que se ha pulsado, y sólo sustituyendo ésta:
Código PHP:
<input type="text" onkeyup="sustituir(event, this)" />

<
script type="text/javascript">

var 
reemplazos = {
    
"a""b",
    
"b""c"
};

function 
sustituir(evtcampo) {
    var 
key = (window.event) ? window.event.keyCode evt.which;
    var 
esLetra = ( (key 64 && key 91) || (key 96 && key 123) || (key==165) || (key==164) || (key==32) || (key==209) || (key==241) );
    if( 
esLetra ) {
        var 
ultimoCaracter String.fromCharCode(key).toLowerCase();
        
campo.value campo.value.substring(0campo.value.length-) + ultimoCaracter.replace( /[a-z]/g, function($1) {
            return 
reemplazos[$1] || $1;
        } );
    }
}

</script> 
Lo que no sé es por qué me está detectando la letra en mayúsculas, le he tenido que poner un toLowerCase() provisional, porque no he podido encontrar el error.



A ver si así te puedes hacer un apaño, a mi me ha funcionado bien, pero ya te digo: minúsculas.


Un saludo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.