Manejo de casos extremos y mejora de nuestra función
En este último paso, mejoraremos nuestra función isISOString
para manejar casos extremos y hacerla más robusta.
Casos extremos comunes
Al validar datos en aplicaciones reales, es necesario manejar diversas entradas inesperadas. Examinemos algunos casos extremos:
- Cadenas vacías
- Valores no de tipo cadena (null, undefined, números, objetos)
- Diferentes representaciones de zonas horarias
Mejorar nuestra función
Actualicemos nuestro archivo isISODate.js
para manejar estos casos extremos:
- Abre el archivo
isISODate.js
en el WebIDE.
- Reemplaza el código existente con esta versión mejorada:
/**
* Checks if a string is a valid ISO 8601 formatted date string
* @param {string} val - The string to check
* @return {boolean} - Returns true if the string is in ISO format, false otherwise
*/
const isISOString = (val) => {
// Check if input is a string
if (typeof val !== "string") {
return false;
}
// Check if string is empty
if (val.trim() === "") {
return false;
}
try {
// Create a Date object from the input string
const d = new Date(val);
// Check if the date is valid and if the ISO string matches the original
return !Number.isNaN(d.valueOf()) && d.toISOString() === val;
} catch (error) {
// If any error occurs during validation, return false
return false;
}
};
// Export the function
module.exports = isISOString;
Esta función mejorada ahora:
- Comprueba si la entrada es una cadena antes de procesarla.
- Maneja cadenas vacías.
- Utiliza un bloque try-catch para manejar cualquier error que pueda ocurrir.
- Todavía realiza nuestra lógica de validación principal.
Probar nuestra función mejorada
Creemos un último archivo de prueba para verificar nuestra función mejorada con casos extremos:
- Crea un nuevo archivo llamado
edgeCaseTester.js
.
- Agrega el siguiente código:
// Import our improved isISOString function
const isISOString = require("./isISODate");
// Function to test and display results
function testCase(description, value) {
console.log(`Testing: ${description}`);
console.log(`Input: ${value === "" ? "(empty string)" : value}`);
console.log(`Type: ${typeof value}`);
console.log(`Is ISO Format: ${isISOString(value)}`);
console.log("-----------------------");
}
// Test with various edge cases
testCase("Valid ISO date", "2023-05-12T14:30:15.123Z");
testCase("Empty string", "");
testCase("Null value", null);
testDate("Undefined value", undefined);
testCase("Number value", 12345);
testCase("Object value", {});
testCase("Current date as ISO string", new Date().toISOString());
- Ejecuta el archivo de prueba:
node edgeCaseTester.js
Aplicación en el mundo real
En una aplicación real, nuestra función isISOString
podría utilizarse en escenarios como:
- Validar la entrada del usuario en un campo de fecha.
- Verificar fechas recibidas de APIs externas.
- Asegurar un formato de fecha consistente en una base de datos.
- Validar datos antes de procesarlos.
Por ejemplo, en una función de validación de formulario:
function validateForm(formData) {
// Other validations...
if (formData.startDate && !isISOString(formData.startDate)) {
return {
valid: false,
error: "Start date must be in ISO format"
};
}
// More validations...
return { valid: true };
}
La función mejorada ahora es lo suficientemente robusta para manejar entradas inesperadas y proporcionar una validación confiable para cadenas de fechas en formato ISO.