Ver Mensaje Individual
  #11 (permalink)  
Antiguo 13/03/2004, 11:59
rbczgz
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 21 años, 1 mes
Puntos: 154
Hola AnaLezama y Carlitos!!

La verdad es que no entiendo nada de lo que me dices .

Yo lo que necesito es que el usuario introduzca una fecha (de nacimiento), que sea anterior a 1986
(por la mayoría de edad) y que se valide o quede en el formato dd/mm/aaaa, ya que hay gente que, a pesar de estar el ejemplo junto al recuadro del text,
la coloca como dd-mm-aa, d-m-aa, ddmmaaaa o dmaa, con lo cual a la hora de usar, por ejemplo el script creo que era de Karlankas,
de los cumpleaños, procesarlas con algún CGI para enviar felicitaciones o lo que sea, si no tienen un formato "unificado" es más problemático.

Yo de programación en general tengo muy poca o nada de idea, voy aprendiendo sobre la marcha con lo que voy haciendo
y gracias a los super expertos que hay en estos foros y que siempre estáis dispuestos a ayudar a los "novatos".

En fin, pues ese es el problema que tengo, en la FAQ nº 13 casi se me resuelve el problema pero me falta saber qué modificar para
que el año se tenga que poner con 4 dígitos, el separador como / sí he conseguido hacerlo pero los dígitos del año no.

Aquí pongo el código como lo he modificado yo:

<script language="JavaScript">

function esDigito(sChr){
var sCod = sChr.charCodeAt(0);
return ((sCod > 47) && (sCod < 58));
}

function valSep(oTxt){
var bOk = false;
var sep1 = oTxt.value.charAt(2);
var sep2 = oTxt.value.charAt(5);
bOk = bOk || ((sep1 == "/") && (sep2 == "/"));
return bOk;
}

function finMes(oTxt){
var nMes = parseInt(oTxt.value.substr(3, 2), 10);
var nAno = parseInt(oTxt.value.substr(6), 10);
var nRes = 0;
switch (nMes){
case 1: nRes = 31; break;
case 2: nRes = 28; break;
case 3: nRes = 31; break;
case 4: nRes = 30; break;
case 5: nRes = 31; break;
case 6: nRes = 30; break;
case 7: nRes = 31; break;
case 8: nRes = 31; break;
case 9: nRes = 30; break;
case 10: nRes = 31; break;
case 11: nRes = 30; break;
case 12: nRes = 31; break;
}
return nRes + (((nMes == 2) && (nAno % 4) == 0)? 1: 0);
}

function valDia(oTxt){
var bOk = false;
var nDia = parseInt(oTxt.value.substr(0, 2), 10);
bOk = bOk || ((nDia >= 1) && (nDia <= finMes(oTxt)));
return bOk;
}

function valMes(oTxt){
var bOk = false;
var nMes = parseInt(oTxt.value.substr(3, 2), 10);
bOk = bOk || ((nMes >= 1) && (nMes <= 12));
return bOk;
}

function valAno(oTxt){
var bOk = true;
var nAno = oTxt.value.substr(6);
bOk = bOk && ((nAno.length == 4) || (nAno.length == 4));
if (bOk){
for (var i = 0; i < nAno.length; i++){
bOk = bOk && esDigito(nAno.charAt(i));
}
}
return bOk;
}

function valFecha(oTxt){
var bOk = true;
if (oTxt.value != ""){
bOk = bOk && (valAno(oTxt));
bOk = bOk && (valMes(oTxt));
bOk = bOk && (valDia(oTxt));
bOk = bOk && (valSep(oTxt));
if (!bOk){
alert("Fecha inválida");
oTxt.value = "";
oTxt.focus();
}
}
}

</script>


Lo que tampoco se es cómo llamar a la función para que se verifique antes de enviar el form, además tengo
scripts para validar el e-mail y repetirlo (onsubmit="javascript:emailCheck(this.email1.value) ;return checkPw(this)"),
para cambiar todos los campos a minúsculas (onChange="javascript:this.value=this.value.toLower Case()";),
y al enviar, cambiar cada 1ª letra de todas las palabras de cada campo a mayúsculas
(onClick="javascript:changeCase(this.form.nombre);c hangeCase(this.form.apellidos);...).
Así que tengo un lío... . Espero que alguien me pueda ayudar.
No se si es mejor o más conveniente verificar la fecha al cambiar de campo (según lo ponía no me acepta "onChange") o al enviar el form.

¡¡Necesito ayuda!! Estoy hecho un lío

Muchas gracias por adelantado.

Salu2

Rubén