Lidando com Casos Extremos e Melhorando Nossa Função
Nesta etapa final, melhoraremos nossa função isISOString para lidar com casos extremos e torná-la mais robusta.
Casos Extremos Comuns
Ao validar dados em aplicações reais, você precisa lidar com várias entradas inesperadas. Vamos examinar alguns casos extremos:
- Strings vazias
- Valores não-string (null, undefined, números, objetos)
- Diferentes representações de fuso horário
Aprimorando Nossa Função
Vamos atualizar nosso arquivo isISODate.js para lidar com esses casos extremos:
- Abra o arquivo
isISODate.js no WebIDE
- Substitua o código existente por esta versão aprimorada:
/**
* 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 função aprimorada agora:
- Verifica se a entrada é uma string antes de processar
- Lida com strings vazias
- Usa um bloco try-catch para lidar com quaisquer erros que possam ocorrer
- Ainda executa nossa lógica de validação principal
Testando Nossa Função Aprimorada
Vamos criar um arquivo de teste final para verificar nossa função aprimorada com casos extremos:
- Crie um novo arquivo chamado
edgeCaseTester.js
- Adicione o seguinte 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());
- Execute o arquivo de teste:
node edgeCaseTester.js
Aplicação no Mundo Real
Em uma aplicação real, nossa função isISOString pode ser usada em cenários como:
- Validar a entrada do usuário em um campo de data
- Verificar datas recebidas de APIs externas
- Garantir um formato de data consistente em um banco de dados
- Validação de dados antes do processamento
Por exemplo, em uma função de validação de formulário:
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 };
}
A função aprimorada agora é robusta o suficiente para lidar com entradas inesperadas e fornecer validação confiável para strings de data formatadas em ISO.