Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] problema con expresiones regulares solo números de 0 a 9999.

Estas en el tema de problema con expresiones regulares solo números de 0 a 9999. en el foro de Javascript en Foros del Web. Hola amigos necesito validar un input text el cual solo debe contener numeros de 1 a 9999, no debe permitir otros caracteres ni espacios. estoy ...
  #1 (permalink)  
Antiguo 03/11/2014, 10:59
 
Fecha de Ingreso: marzo-2009
Mensajes: 32
Antigüedad: 15 años
Puntos: 3
Pregunta problema con expresiones regulares solo números de 0 a 9999.

Hola amigos necesito validar un input text el cual solo debe contener numeros de 1 a 9999, no debe permitir otros caracteres ni espacios.

estoy trabajando con este ejemplo pero no me funciona.

Código PHP:
var patron = /dddd/;                         
if ( !
patron.test(movilcheck)) {
    
alert("Número es correcto");
}else {
    
alert("El número es incorrecto");

Gracias de antemano¡¡¡¡

Saludos...
Charly.
  #2 (permalink)  
Antiguo 03/11/2014, 12:50
 
Fecha de Ingreso: marzo-2009
Mensajes: 32
Antigüedad: 15 años
Puntos: 3
Sonrisa Respuesta: problema con expresiones regulares solo números de 0 a 9999.

Escribi mal el titulo del tema, seria numeros de 1 a 9999.

Ya lo había probado pero no funciona. te paso la prueba que estoy haciendo.



Código PHP:
<!DOCTYPE html>
<
html>
<
body>

<
button onclick="myFunction()">Probar</button>

<
p id="demo"></p>

<
script>
function 
myFunction() {
    


    var 
visa "12";


if (!
visa.match(/^[1-9999]$/))
  
visa_error "No es un número de Visa correcto";
else
 
visa_error"Numero visa correcto"
;
    
document.getElementById("demo").innerHTML visa_error;
}
</script>

</body>
</html> 
Con el patrón /^(1|2|3|5|6|7|8|9)?[0-9]?[0-9]?[0-9]$/ logre acercarme pero cuando pongo 01 me lo machea como correcto cuando no tiene que ser así.

Tambien probe con /^[1-9]?[0-9]?[0-9]?[0-9]$/ pero me hace lo mismo, me comprueba bien de 1 a 9999 pero si le pongo 01 tambien me lo da como valido cuando yo necesito que no lo de por valido.

Gracias por tu ayuda¡¡¡
  #3 (permalink)  
Antiguo 03/11/2014, 13:19
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: problema con expresiones regulares solo números de 0 a 9999.

te falta el cuantificador
Cita:
/^[1-9]{1, 4}$/
continua usando el método test(). match() se usa cuando se quiere obtener la cadena que encaja con la expresión
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Última edición por IsaBelM; 03/11/2014 a las 13:27 Razón: me quedé con 9999
  #4 (permalink)  
Antiguo 03/11/2014, 13:23
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: problema con expresiones regulares solo números de 0 a 9999.

Vale, debería ser:

Cita:
/^[1-9]{1, 4}$/
Lo que puse antes es incorrecto. Damn!
  #5 (permalink)  
Antiguo 03/11/2014, 13:34
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: problema con expresiones regulares solo números de 0 a 9999.

no había problema. cuando se crea un rango se toman el último y el primer carácter
Cita:
[28888881-9123344] == [1-9]
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #6 (permalink)  
Antiguo 03/11/2014, 13:50
 
Fecha de Ingreso: marzo-2009
Mensajes: 32
Antigüedad: 15 años
Puntos: 3
Respuesta: problema con expresiones regulares solo números de 0 a 9999.

Modifique con test pero me da todo falso.

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.  
  3.  
  4. <button onclick="myFunction()">prueba</button>
  5.  
  6. <p id="demo"></p>
  7.  
  8. function myFunction() {
  9.     var str = "1111";
  10.     var patt = new RegExp("^[1-9]{1, 4}$");
  11. alert (patt);
  12. var res = patt.test(str);
  13.     document.getElementById("demo").innerHTML = res;
  14. }
  15.  
  16. </body>
  17. </html>
  #7 (permalink)  
Antiguo 03/11/2014, 14:03
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: problema con expresiones regulares solo números de 0 a 9999.

Elimina el espacio en blanco de la repetición... parece que afecta.

De verdad... ¡Malditos creadores de RegExp! Como les gusta complicar la vida de las personas
  #8 (permalink)  
Antiguo 03/11/2014, 14:53
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: problema con expresiones regulares solo números de 0 a 9999.

bueno no es exactamente así. me expresé mal. lo que ocurre es que toma el primer valor de cada parte y si el valor a comprobar no está en ese rango toma el segundo valor de la primera parte y el primero de la segunda. con lo que en una expresión [1-95] hay dos combinaciones [1-9] y [1-5]. unos ejemplos te lo aclarara
Cita:
for (var i = 0; i <= 9; i++) {
if(!/[8828888-999999]/.test(i)) console.log(i);
}


for (var i = 0; i <= 9; i++) {
if(!/[88288881-999999]/.test(i)) console.log(i);
}
imagina que quieres que el valor a evaluar esté entre el 80 y 99
Cita:
for (var i = 80; i <= 99; i++) {
console.log(/^([89]\d)$/.test(i));
}
una vez dicho esto último, no es practico evaluar si el valor está entre el 1 y 9999 con expresiones regulares. yo lo haría con parseInt()
Cita:
var str = parseInt('99099', 10);

if(str < 1 || str > 9999) {
console.log('error ' + str);
}
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #9 (permalink)  
Antiguo 03/11/2014, 15:01
 
Fecha de Ingreso: marzo-2009
Mensajes: 32
Antigüedad: 15 años
Puntos: 3
Respuesta: problema con expresiones regulares solo números de 0 a 9999.

Cita:
Iniciado por PHPeros Ver Mensaje
Elimina el espacio en blanco de la repetición... parece que afecta.

De verdad... ¡Malditos creadores de RegExp! Como les gusta complicar la vida de las personas
La verdad que si, me quema la cabeza¡¡¡¡¡pero lo bueno es que con poco podes ahorrar mucho codigo¡¡¡

al final me quedo asi¡¡¡

/^([1-9]\d{0,3})?$/) solo numeros de 1 a 9999.

ejemplo:

1 = correcto
10 = correcto
100 = correcto
1000 = correcto
9999 = correcto

01 = incorecto
1a0 = incorrecto
a10 = incorrecto

funciona de 10¡¡¡

la dejo para el que la necesite¡¡¡

abrazos¡¡¡
  #10 (permalink)  
Antiguo 03/11/2014, 15:17
 
Fecha de Ingreso: marzo-2009
Mensajes: 32
Antigüedad: 15 años
Puntos: 3
Respuesta: problema con expresiones regulares solo números de 0 a 9999.

Paso todo el codigo completo para el que lo necesite¡¡¡
Gracias PHPeros y IsaBelM, deje votos para los dos¡¡¡

Abrazos¡¡¡
Charly¡¡¡

Expresion regular para solo numeros de 1 a 9999, para evaluar de 0 a 9999 solo hay que cambiar el [1-9] por [0-9]

Código PHP:
<!DOCTYPE html>
<
html>
<
body>

<
button onclick="myFunction()">Probar</button>

<
p id="demo"></p>

<
script>
function 
myFunction() {
    
    var 
visa "1";

if (!
visa.match(/^([1-9]d{0,3})?$/))
  
visa_error "No es un número de Visa correcto";
else
 
visa_error"Numero visa correcto"
;
    
document.getElementById("demo").innerHTML visa_error;
}
</script>

</body>
</html> 
  #11 (permalink)  
Antiguo 03/11/2014, 16:13
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: problema con expresiones regulares solo números de 0 a 9999.

has vuelto a usar el método match(). en este caso el adecuado es test(). no has salvado (d) por lo que no será tomado como un metacaracter. has incluido el metacaracter (?) que es equivalente a {0.1} y hará que admita valores vacíos

Cita:
if (!/^[1-9]\d{0,3})$/.test(visa)
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Etiquetas: expresiones, funcion, input, regulares
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 16:56.