Buenas noches. Aquí va el ejecicio CU01185E del curso JavaScript desde cero.
EJERCICIO
Un programador ha desarrollado un código y nos han pedido que lo revisemos. Escribe este código en un editor y responde a las siguientes preguntas:
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
input {margin:10px;}
</style>
<script>
function Valida(formulario) {
/* Validación de campos NO VACÍOS */
if ((formulario.campo1.value.length == 0) || (formulario.campo2.value.length ==0) || (formulario.cpostal.value.length ==0) || (formulario.dni.value.length ==0) || (formulario.email.value.length ==0)) {
alert('Falta información');
return false;
}
if (isNaN(parseInt(formulario.campo2.value))) {
alert('El campo2 debe ser un número');
return false;
}
/* validación del CÓDIGO POSTAL*/
var ercp=/(^([0-9]{5,5})|^)$/;
if (!(ercp.test(formulario.cpostal.value))) {
alert('Contenido del código postal no es un código postal válido');
return false; }
/* validación del DNI */
var erdni=/(^([0-9]{8,8}\-[A-Z])|^)$/;
if (!(erdni.test(formulario.dni.value))) {
alert('Contenido del dni no es un DNI válido.');
return false; }
/* validación del e-mail */
var ercorreo=/^[^@\s]+@[^@\.\s]+(\.[^@\.\s]+)+$/;
if (!(ercorreo.test(formulario.email.value))) {
alert('Contenido del email no es un correo electrónico válido.');
return false; }
/* si no hemos detectado fallo devolvemos TRUE */
return true;
}
</script>
</head>
<body>
<form name="miFormulario" onsubmit="return Valida(this);" action="http://aprenderaprogramar.com" >
Campo1 <input type="text" name="campo1"><br>
Campo2 (debe ser número) <input type="text" name="campo2"><br>
Código postal <input type="text" name="cpostal"><br>
DNI <input type="text" name="dni"><br>
email <input type="text" name="email"><br>
<input type="submit" value="Enviar" name="enviar">
</form>
</body>
</html>
a) ¿Cómo se realiza la comprobación de que no hay campos vacíos?
if ((formulario.campo1.value.length == 0) || (formulario.campo2.value.length ==0) || (formulario.cpostal.value.length ==0) || (formulario.dni.value.length ==0) || (formulario.email.value.length ==0)){
alert('Falta información');
return false;
}
b) ¿Cómo se realiza la comprobación de que el campo 2 es un número?
if (isNaN(parseInt(formulario.campo2.value))) {
alert('El campo2 debe ser un número');
return false;
}
c) ¿En qué consiste la validación del código postal? Explícala paso a paso. Pon ejemplos de tres valores válidos y tres valores no válidos.
Se inicializa una expresión regular mediante la variable local "ercp". Para que se cumpla la expresión regular el dato entredo en el campo "cpostal" tiene que empezar y acabar con un dígito numérico entre 0 y 9 y tiene que tener una longitud mínima y máxima de 5 dígitos.
La condicional que maneja dicho campo hace un test sobre el dato entredo. Si se cumple la expresión regular no se ejecuta el código de la condicional, pero si no se cumple, se muestra un mensaje: "Contenido del código postal no es un código postal válido" y la función devuelve false.
Valores válidos: 01234, 74384 ó 00000
Valores NO válidos: 9896j, 0.1234, ó 123456
d) ¿En qué consiste la validación del DNI? Explícala paso a paso. Pon ejemplos de tres valores válidos y tres valores no válidos.
Se inicializa una expresión regular mediante la variable local "erdni". Para que se cumpla la expresión regular el dato entredo en el campo "dni" tiene que empezar con un dígito numérico entre 0 y 9 con una longítud mínima y máxima de 8 dígitos, seguido de un "-" y acabar cun un dígito (en mayúscula) entre A Y Z.
La condicional que maneja dicho campo hace un test sobre el dato entredo. Si se cumple la expresión regular no se ejecuta el código de la condicional, pero si no se cumple, se muestra un mensaje: "Contenido del dni no es un DNI válido." y la función devuelve false.
Valores válidos: 00000000-F, 93841827-S ó 01010101-A
Valores NO válidos: 12345678F, 92837465-w ó 1234567-T
e) ¿En qué consiste la validación del email? Explícala paso a paso. Pon ejemplos de tres valores válidos y tres valores no válidos.
Se inicializa una expresión regular mediante la variable local "ercorreo". Para que se cumpla la expresión regular el dato entredo en el campo "emaill" NO tiene que empezar con "@" ni con un espacio en blanco. El símbolo "+" indica que la subcadena contiene el símbolo al que precede una o más veces. Luego tiene que contener un símbolo "@" seguido de una subcadena que no contenga ni "@", ni espacios en blanco, ni punto. Al final tiene que acabar con un punto y cualquier carácter las veces que queramos, que no se ni "@", ni punto, ni espacio en blanco y después de esa subcadena no puedo haber ningún carácter "@", ni espacio en blanco ni punto.
La condicional que maneja dicho campo hace un test sobre el dato entredo. Si se cumple la expresión regular no se ejecuta el código de la condicional, pero si no se cumple, se muestra un mensaje: "Contenido del email no es un correo electrónico válido." y la función devuelve false.
Valores válidos: jfkkjasl@fljafj.fjaksdjfa, ljfajs@jflkajf.34, 78484@787484.ji
Valores NO válidos: kfldsjf, @kfaslfs.jkflajskl, fjlsajl @ jffkls.com
f) ¿Cómo se consigue que no se envíe el formulario si no se cumplen los requisitos exigidos?
onsubmit="return Valida(this);
Si la devolución de la función es false se cancela la acción del método "submit()".
Gracias.
PD: No estoy muy seguro si entiendo esto:
/(^([0-9]{5,5})|^)$/
Yo interpreto que significa: que la subcadena empiece y termine con un dígito de número entre 0 y 9 y que tenga un longitud mínima y máxima de 5 dígitos o que empiece. Pero que significa "|^". Que empiece pero con qué si luego no hay ningún carácter?