Foros del Web » Programando para Internet » Javascript »

Bloquear expresion si se cumple

Estas en el tema de Bloquear expresion si se cumple en el foro de Javascript en Foros del Web. hola compañeros tengo una mascara de formato Hora @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original var Init = function ( e , fn ) { ...
  #1 (permalink)  
Antiguo 11/07/2012, 16:21
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 6 meses
Puntos: 76
Bloquear expresion si se cumple

hola compañeros

tengo una mascara de formato Hora

Código Javascript:
Ver original
  1. var Init = function(e,fn)
  2. {
  3.     e.value = fn(e.value);
  4. }
  5.  
  6. function Hora(e)
  7. {  
  8.     return e.replace(/(0[1-9]|[12]+[0-4])+(0[1-9]|[12345][1-9])$/gi,"$1:$2")
  9. }

Código HTML:
Ver original
  1. <input type="text" id="cambios" value="" onkeyup="javascript:Init(this,Hora)"/>

Como puedo bloquear o hacer que si se cumple la expresion no pueda escribir mas.... si yo escribo 0102 quedaria asi: 01:02 , ahi se cumplio y que no permita hacer 01:020202 ... o tambien que elimine los caracteres despues del texto que cumple la expresion regular

gracias.

Última edición por informacionsys; 11/07/2012 a las 16:41
  #2 (permalink)  
Antiguo 11/07/2012, 17:18
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Bloquear expresion si se cumple

Si el formato de la hora no va a variar, basta con que agregues el atributo
maxlength="5"
al input, te serviria desde
00:00 hasta
23:59

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 11/07/2012, 17:26
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 6 meses
Puntos: 76
Respuesta: Bloquear expresion si se cumple

hola

ok gracias, si tienes toda la razon ,pero lo voy hacer desde javascript , validar la cantidad de caracteres...
  #4 (permalink)  
Antiguo 12/07/2012, 06:58
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Respuesta: Bloquear expresion si se cumple

Cita:
Iniciado por informacionsys Ver Mensaje
... lo voy hacer desde javascript , validar la cantidad de caracteres...
... del maxlength ?

Código:
function Hora(e)
{  
	document.getElementById("cambios").maxLength = "5";
	return e.replace(/(0[1-9]|[12]+[0-4])+(0[1-9]|[12345][1-9])$/gi,"$1:$2");
}


De todas formas, hay un detalle que debes arreglar, el evento funciona mientras tengas presionada la tecla. Eso te permite ingresar el mismo caracter todas las veces que quieras.
  #5 (permalink)  
Antiguo 12/07/2012, 08:14
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Bloquear expresion si se cumple

de primera la expresión no valida el rango (15 -19). después lo que comenta furoya es fácil de corregir. ya se trató en otro tema (ahora no lo encuentro) y por último, por qué invocas a la función "Hora" desde otra función??
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #6 (permalink)  
Antiguo 12/07/2012, 08:37
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 6 meses
Puntos: 76
Respuesta: Bloquear expresion si se cumple

hola

mira porque si lo hago directamente en la funcion Hora asi:

Código Javascript:
Ver original
  1. function Hora(e)
  2. {  
  3.     e = e.value.replace(/\D/gi,"")
  4.     e = e.value.replace(/(0[1-9]|1[0-2])+(0[1-9]|[012345][0-9])$/gi,"$1:$2")
  5.     return e;
  6. }

Me dice que e.value is undefined....
  #7 (permalink)  
Antiguo 12/07/2012, 10:00
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Bloquear expresion si se cumple

Cita:
Iniciado por furoya Ver Mensaje
... del maxlength ?

Código:
function Hora(e)
{  
	document.getElementById("cambios").maxLength = "5";
	return e.replace(/(0[1-9]|[12]+[0-4])+(0[1-9]|[12345][1-9])$/gi,"$1:$2");
}


De todas formas, hay un detalle que debes arreglar, el evento funciona mientras tengas presionada la tecla. Eso te permite ingresar el mismo caracter todas las veces que quieras.
Cita:
Iniciado por IsaBelM Ver Mensaje
de primera la expresión no valida el rango (15 -19). después lo que comenta furoya es fácil de corregir. ya se trató en otro tema (ahora no lo encuentro) y por último, por qué invocas a la función "Hora" desde otra función??
@furoya, @isaBelM

siguiendo un poco vuestras líneas de pensamiento (como la de tantos otros grandes del Javascript que participan de FDW)
Esto de usar javascript para este caso en lugar de tan solo un atributo html, equivale a cargar una librería (como se dice @furoya... yacuery?) para modificarle el color a un texto onmouseover.

hay algún impedimento ó falla en proponer el uso de maxlenght como sugerí?


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #8 (permalink)  
Antiguo 12/07/2012, 10:40
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 6 meses
Puntos: 76
Respuesta: Bloquear expresion si se cumple

hola

mmmmm no hay ningun impedimento o que sea incorrecto hacer lo que tu dices emprear , pero la idea es que se pueda hacer desde la funcion, por que ? porque si un usuario usa la funcion , deberia saber que tiene que colocar el atributo al input, y si no la coloca," ohhhh no me funciona"
  #9 (permalink)  
Antiguo 12/07/2012, 10:52
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Respuesta: Bloquear expresion si se cumple

¡Por eso yo te lo metí en la función. !
(Je)

Cita:
Iniciado por emprear Ver Mensaje
...siguiendo un poco vuestras líneas de pensamiento (como la de tantos otros grandes del Javascript que participan de FDW)...
Me alegra que haya dejado su falsa humildad de lado y reconozca que pertenece al grupo de los grandes.

(No lo digo por ustedes, pero hay un pedante que si sigue metiendo estos comentarios le van a pegar un shot-de-cul en cualquier momento.)


Y sí, ¿no se pronuncia "yaicuery"? Mi inglés está medio aporteñado.
  #10 (permalink)  
Antiguo 12/07/2012, 11:38
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Bloquear expresion si se cumple

Cita:
Iniciado por furoya Ver Mensaje
¡Por eso yo te lo metí en la función. !
(Je)
Me alegra que haya dejado su falsa humildad de lado y reconozca que pertenece al grupo de los grandes.
.


NO!!!, yo no me incluí en ningún momento, por eso lo de "vuestras"... yo solo soy algo "ingenioso"... (según han dicho por ahi)

@informacionsys

Sabrá quien la use que esta validando un input? porque si pone la función sola, mucho no va a conseguir.
Yo me atengo a lo propuesto "Bloquear expresion si se cumple", no a si estás desarrrollando una función para el posterior uso de un tercero, tanto la imaginación no me vuela

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #11 (permalink)  
Antiguo 12/07/2012, 16:14
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Bloquear expresion si se cumple

Cita:
Iniciado por informacionsys Ver Mensaje
hola

mira porque si lo hago directamente en la funcion Hora asi:

Código Javascript:
Ver original
  1. function Hora(e)
  2. {  
  3.     e = e.value.replace(/\D/gi,"")
  4.     e = e.value.replace(/(0[1-9]|1[0-2])+(0[1-9]|[012345][0-9])$/gi,"$1:$2")
  5.     return e;
  6. }

Me dice que e.value is undefined....
y así??
Cita:
function Hora(e)
{
e.value = e.value.replace(/(0[1-9]|[12]+[0-4])+(0[1-9]|[12345][1-9])$/gi,"$1:$2")
}

<input type="text" id="cambios" value="" onkeyup="Hora(this)"/>
aunque tampoco es que merezca hablar mucho de ello ya que hace aguas por todos los lados. mas de lo que me pareció esta mañana

prueba con esta mascara de entrada
Cita:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; http-equiv="Content-Type" charset=utf-8"/>
<title></title>
<script type="text/javascript">
var patron = new Array(2,2)
function Validar(elem,separador,pat,numerico) {
if(elem.valoranterior != elem.value) {
valor = elem.value;
largo = valor.length;
valor = valor.split(separador);
valor2 = "";

for(i=0; i<valor.length; i++) {
valor2 += valor[i];
}

if(numerico){
for(j=0; j<valor2.length; j++){
if(isNaN(valor2.charAt(j))){
letra = new RegExp(valor2.charAt(j),"g");
valor2 = valor2.replace(letra,"");
}
}
}

valor = "";
valor3 = new Array();
for(n=0; n<pat.length; n++) {
valor3[n] = valor2.substring(0,pat[n]);
valor2 = valor2.substr(pat[n]);
}

for(q=0; q<valor3.length; q++) {
if(q == 0) {
if (valor3[0] > 24) {
valor = "";
}else{


if (valor3[q].split('')[0] >=3 && valor3[q].split('')[0] <=9) {

valor = "0" + valor3[q];



} else {


valor = valor3[q];

}

}

}else{
if(valor3[q] != "") {
if ((valor3[0] == 24) && (valor3[1] >= 0)) {

valor = "00:" + valor3[1];

} else if (valor3[1] > 59) {

valor = valor3[0];

}else{
valor += separador + valor3[q];
}
}
}
}

elem.value = valor;
elem.valoranterior = valor;
}
}
</script>
</head>
<body>
<form>
<input type="text" name="fecha" id= "fecha" onkeyup="Validar(this,':',patron,true)" maxlength="5" />
</form>
</body>
</html>
la base del código fue sacada de tunait


Cita:
Iniciado por emprear Ver Mensaje
hay algún impedimento ó falla en proponer el uso de maxlenght como sugerí?
como creo que es una pregunta retorica e incluyete. "vos sos" grande
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #12 (permalink)  
Antiguo 12/07/2012, 16:28
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 6 meses
Puntos: 76
Respuesta: Bloquear expresion si se cumple

hola

gracias a todos por sus aportes, IsaBelM gracias por depurarme...
  #13 (permalink)  
Antiguo 13/07/2012, 20:41
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Respuesta: Bloquear expresion si se cumple

Cita:
Iniciado por IsaBelM Ver Mensaje
... después lo que comenta furoya es fácil de corregir. ya se trató en otro tema (ahora no lo encuentro) ...
Encontreeelooo!

Restringir cantidad de carácteres de tecla presionada de forma sostenida


Cita:
Iniciado por IsaBelM Ver Mensaje
... incluyete. "vos sos" grande
(Muy bien. Hay que levantarle la autoestima al hombre. Algún día tiene que asumirse.
Y que sepa que su abuelo Pirri estaría orgulloso.)

Etiquetas: bloquear, cumple, expresion, input
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:17.