Estoy realizando una serie de funciones para restringir a usuarios a que solo puedan meter ciertos caracteres, tengo hasta ahora cuatro tipo de restricciones de las cuales tres funcionan bien. La cuarta restriccioón no funciona bien pues el argumento que recibe no lo recibe como referencia sino por valor, la pregunta es si alguién me puede ayudar a que eso funcione.
 
 
Solo me falta mencionar que el código no sirve en IE, para eso también sigo trabajando.
 
 
 
 
<html>
	<head>
		<script>
 
//*********************************funciones de validación*********************************
//este método valida que solo contenga texto un campo
		objVal=new Array();
		function validaTexto(){
				this.cadena=document.getElementById(this.campo).va  lue;
				respuesta=false;
				expReg=new RegExp("^[a-z\ \á-\ú\ü\Ü\Á-\Ú]+$","gi");
				if(expReg.test(this.cadena))
					respuesta=true;
				return respuesta;
			}
 
//este método valida que un campo solo contenga texto sin espacios
			function validaTextoSE(){
				this.cadena=document.getElementById(this.campo).va  lue;
				respuesta=false;
				expReg=new RegExp("^[a-z\á-\ú\ü\Ü\Á-\Ú]+$","gi");
				if(expReg.test(this.cadena))
					respuesta=true;
				return respuesta;
			}
 
//este método valida que sun campo solo contenga números enteros
			function validaEntero(){
				this.cadena=document.getElementById(this.campo).va  lue;
				respuesta=false;
				expReg=new RegExp("^[0-9]+$","gi");
				if(expReg.test(this.cadena))
					respuesta=true;
				return respuesta;
			}
 
//este método verifica que un campo contenga, ya sea números enteros o de punto flotante
			function validaFlotante(){
				this.cadena=document.getElementById(this.campo).va  lue;
				respuesta=false;
				expReg=new RegExp("^[0-9]+(.[0-9]+)?$","gi");
				if(expReg.test(this.cadena))
					respuesta=true;
				expReg=new RegExp("[\ -\-]|\/|[\:-\~]","gi");
				if(expReg.test(this.cadena))
					return false;
				return respuesta;
			}
 
//************************************Métodos varios***************************************
 
			function vacio(){//comprueba si el campo no esta vacío
				expReg=new RegExp("[\!-\~]+","gi");
				if(expReg.test(this.cadena))
					return true;
				else
					return false;
			}
 
			function mensaje(){//genera un mensaje seguún el tipo de campo y el estado del mismo
				this.cadena=document.getElementById(this.campo).va  lue;
				noVacio=this.vacio();				
				if(this.valida())
					return;
				else{
					if((!noVacio)&&(this.requerido==1||this.tipo==0)){
						cadenaMensaje="El campo "+this.texto+" es un campo requerido favor de llenarlo";
						document.getElementById(this.campo).focus();
					}
					else{
						if(noVacio){
							if(this.tipo==1)
								cadenaMensaje="El campo "+this.texto+" solo acepta texto";
							if(this.tipo==2)
								cadenaMensaje="El campo "+this.texto+" solo acepta texto sin espacios";
							if(this.tipo==3)
								cadenaMensaje="El campo "+this.texto+" solo acepta números enteros";
							if(this.tipo==4)
								cadenaMensaje="El campo "+this.texto+" solo acepta números";
						}
						else
							return;
					}
					alert(cadenaMensaje);
					document.getElementById(this.campo).focus();
				}
			}
 
//******************************Constructor de la clase CampoVal***************************			
//esta clase conjunta los atributos y métodos necesarios para hacer validaciones
			function CampoVal(campo,tipo,texto,requerido){
				if(campo==1)
					return;
				this.cadena=document.getElementById(campo).value;
				this.campo=campo;
				this.tipo=tipo;
				this.texto=texto;
				this.requerido=requerido;
				if(this.tipo==0){
					this.valida=vacio;
					this.bloquea=noBloquea;
				}
				if(this.tipo==1){
					this.valida=validaTexto;
					this.bloquea=soloTexto;
				}
				if(this.tipo==2){
					this.valida=validaTextoSE;
					this.bloquea=soloTextoSE;
				}
				if(this.tipo==3){
					this.valida=validaEntero;
					this.bloquea=soloEnteros;
				}
				if(this.tipo==4){
					this.valida=validaFlotante;
					this.bloquea=soloNumeros;
				}
				this.mensaje=mensaje;
				this.vacio=vacio;				
			}
 
			/*x=new CampoVal("prueba1",1,"Prueba1",0);
			onkeypress=x.bloquea;*/
 
//********************************funciones de Bloqueo*************************************
//esta funcion solo permite que se ingrese texto en un campo
			function soloTexto(e){
				expReg=new RegExp("^[a-z\ \á-\ú\ü\Ü\Á-\Ú]$","gi");
				var caracter=e.which;
				if(caracter<=10)
					return true;
				if(!(expReg.test(String.fromCharCode(caracter)))){
					alert("Este campo solo acepta TEXTO!");
					return false;
				}
			}
 
//esta funcion solo permite que se ingrese texto sin espacios en un campo
			function soloTextoSE(){
				expReg=new RegExp("^[a-z\á-\ú\ü\Ü\Á-\Ú]$","gi");
				var caracter=e.which;
				if(caracter<=10)
					return true;
				if(!(expReg.test(String.fromCharCode(caracter)))){
					alert("Este campo solo acepta TEXTO SIN ESPACIOS!");
					return false;
				}
			}
 
//este método solo permite que se ingresen números enteros en un campo
			function soloEnteros(){
				expReg=new RegExp("^[0-9]$","gi");
				var caracter=e.which;
				if(caracter<=10)
					return true;
				if(!(expReg.test(String.fromCharCode(caracter)))){
					alert("Este campo solo acepta NÚMEROS ENTEROS!");
					return false;
				}
			}
 
//este método solo permite que se ingresen números, ya sean enteros o de punto flotante
//n un campo.
			function soloNumeros(e){
				this.cadena=document.getElementById(this.campo).va  lue;
				expReg1=new RegExp("[.]","gi");
				if(expReg1.test(this.cadena))
					expReg=new RegExp("^[0-9\c127]$","gi");
				else
					expReg=new RegExp("^[0-9.]$","gi");
				var caracter=e.which;
				if(caracter<=10)
					return true;
				if(!(expReg.test(String.fromCharCode(caracter)))){
					alert("Este campo solo acepta NÚMEROS!");
					return false;
				}
			}
 
//este método no hace nada
			function noBloquea(){
			}
		</script>
	</head>
 
	<body bgcolor="Maroon">
		<input type="text" id="prueba"  name="prueba" onfocus="x=new CampoVal('prueba',1,'Prueba',0);" onkeypress="onkeypress=x.bloquea;" onblur="x.mensaje();">
		<input type="text" id="prueba1"  name="prueba1" onfocus="x=new CampoVal('prueba1',4,'Prueba1',0);" onkeypress="x.bloquea(event);"  onblur="x.mensaje();">
		<input type="button" name="Valida" value="Valida">
	</body>
 
</html> 
   
 

