Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Expresion Regular en javascript

Estas en el tema de Expresion Regular en javascript en el foro de Javascript en Foros del Web. Hola, soy nuevo en esto de la programación y necesito crear una expresion regular para validar una tarjeta sanitaria que tiene los siguientes requisitos de ...
  #1 (permalink)  
Antiguo 30/11/2014, 09:37
 
Fecha de Ingreso: noviembre-2014
Mensajes: 2
Antigüedad: 3 años, 8 meses
Puntos: 0
Expresion Regular en javascript

Hola, soy nuevo en esto de la programación y necesito crear una expresion regular para validar una tarjeta sanitaria que tiene los siguientes requisitos de ejemplo:

EJEMPLO DE TARJETA: MJRE791122911019

El desglose sería el siguiente:

1.- "MJRE" Son cuantro letras entre la A y la Z
2.- "79" Es el año de nacimiento, por lo que pueden ser numeros del 0 al 9
3.- "11" Es el MES de nacimiento, por lo que el primer 1 solo puede ser 0 o 1 y el segundo 1 puede ser un numero del 0 al 9
4.- "22" es el DIA de nacimiento por lo que el primer 2 solo puede ser 0,1,2 o 3 y el segundo 2 puede ser un numero del 0 al 9
5.- "911019" son 6 NUMEROS cualquiera

Heh hecho la siguiente funcion, ya seéque está mal y no sé siquiera si la estoy construyendo bien porque es mi primera experiencia en javascript, asi que agradeceria enormemente la ayuda de alguien:

function validaTarjeta() {
if (/^([A-z]{4})([0-9]{2})([0-1]{1})([0-9]{1})([0-3]{1})([0-9]{1})([0-9]{6})$/.test(document.formulario.tarjeta.value)){
alert("La tarjeta sanitaria: " + valor + " cumple los requisitos.");
} else {
alert("La tarjeta sanitaria no es válida.");
}
}



Un saludo y muchas gracias por anticipado.
  #2 (permalink)  
Antiguo 30/11/2014, 10:59
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 7 años, 7 meses
Puntos: 206
Respuesta: Expresion Regular en javascript

Código BASH:
Ver original
  1. Tuya: /^([A-z]{4})([0-9]{2})([0-1]{1})([0-9]{1})([0-3]{1})([0-9]{1})([0-9]{6})$/
  2. Mia: /^[a-z]{4}[0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[01])[0-9]{6}$/i
  3.  
  4. Resumen:
  5. Punto 1: [a-z]{4}
  6. Punto 2: [0-9]{2}
  7. Punto 3: (0[1-9]|1[0-2])
  8. Punto 4: (0[1-9]|[1-2][0-9]|3[01])
  9. Punto 5: [0-9]{6}
  10.  
  11. El i es para que no distinga mayusculas/minusculas.

Hay páginas como ésta http://regex101.com/#javascript que ayudan bastante porque te dicen si estás cometiendo errores al escribir, te describen la expresión, y tienen un tester online.
Son más las comprobaciones que tienes que hacer. El mes son números del 01 al 12. El día, de 01 a 31.

Hay expresiones regulares que son capaces de comprobar si el día dado es correcto en el mes dado, por ejemplo para no tragarse un 30 de febrero; sin embargo se hacen usando lookaheads y mierdas de esas, pero no tengo fuerzas.

Última edición por marlanga; 30/11/2014 a las 11:07
  #3 (permalink)  
Antiguo 30/11/2014, 11:13
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 12 años, 1 mes
Puntos: 32
Respuesta: Expresion Regular en javascript

¡Está casi perfecto!

Cita:
1.- "MJRE" Son cuantro letras entre la A y la Z
Debería ser así:
Código Javascript:
Ver original
  1. [a-zA-Z]{4}
Cuidado con poner de A mayuscula a z minuscula porque entre medio hay caracteres que no son letras

Cita:
2.- "79" Es el año de nacimiento, por lo que pueden ser numeros del 0 al 9
Puede expresarse así:
Código Javascript:
Ver original
  1. [0-9]{2}
aunque un digito del 0 al 9 se puede expresar con el caracter escapado \d y quedar así:
Código Javascript:
Ver original
  1. \d{2}
y dos dígitos también se puede expresar como uno detrás del otro:
Código Javascript:
Ver original
  1. \d\d
Así que lo tienes bien. Sólo, si quieres, lo puedes acortar.

Cita:
3.- "11" Es el MES de nacimiento, por lo que el primer 1 solo puede ser 0 o 1 y el segundo 1 puede ser un numero del 0 al 9
Se puede expresar así:
Código Javascript:
Ver original
  1. [0-1]{1}[0-9]{1}
Aunque cuando un símbolo se repite una única vez ({1}) se puede obviar el número de repeticiones:
Código Javascript:
Ver original
  1. [0-1][0-9]
Y como un dígito de 0 al 9 se puede expresar como \d puede quedar así:
Código Javascript:
Ver original
  1. [0-1]\d
Incluso cuando se trata de indicar dos únicos caracteres (el 0 o el 1) en vez de un rango (del 0 al 1) se puede expresar [01] en vez de [0-1]
Código Javascript:
Ver original
  1. [01]\d

Cita:
4.- "22" es el DIA de nacimiento por lo que el primer 2 solo puede ser 0,1,2 o 3 y el segundo 2 puede ser un numero del 0 al 9
Tú lo tienes puesto así:
Código Javascript:
Ver original
  1. ([0-3]{1})([0-9]{1})
y esta bien, pero los paréntesis no son necesarios y puedes modificarlo según lo dicho anteriormente. El punto 5 también está bien.

Luego lo concatenas todos tal como has hecho y listos. Puedes obviar los paréntesis.

En resumen, lo tenías todo bien excepto el punto 1. Como mucho te falta pulirlo con las cosas que te he dicho.

Otra cosa será que según lo que te dice el enunciado, se permitan dias como el 39 y meses como el 00 ó 18. Pero esto no es problema tuyo, es problema de que el enunciado no es más concreto. De todas maneras, si el enunciado está puesto así es porque hacerlo más preciso seria demasiado complejo para alguien que empieza con expresiones regulares.

Edit: vaya, marlanga te me has adelantado, vuelves a estar activo por estos foros. Me alegro!

Un saludo!
__________________
github.com/xgbuils | npm/xgbuils

Última edición por Pantaláimon; 30/11/2014 a las 11:20
  #4 (permalink)  
Antiguo 30/11/2014, 11:23
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 7 años, 7 meses
Puntos: 206
Respuesta: Expresion Regular en javascript

Me alegro también de que tú continúes por aquí, pero no lo celebremos demasiado pronto porque la causa de que hoy pulule por aquí es que mi web porno favorita está caída, pero tengo la esperanza de que se recupere mas temprano que tarde. Azotar novatillos en público ya no me excita tanto como antes.
  #5 (permalink)  
Antiguo 30/11/2014, 11:42
 
Fecha de Ingreso: noviembre-2014
Mensajes: 2
Antigüedad: 3 años, 8 meses
Puntos: 0
Respuesta: Expresion Regular en javascript

Muchas gracias a todos por vuestra ayuda y colaboración !! Os estoy enormemente agredecido. Saludos !!

Etiquetas: expresion, formulario, funcion, regular, valor
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 08:29.