Обработка крайних случаев и улучшение нашей функции
На этом последнем этапе мы улучшим нашу функцию isISOString
, чтобы она могла обрабатывать крайние случаи и стала более надежной.
Общие крайние случаи
При валидации данных в реальных приложениях необходимо обрабатывать различные неожиданные входные данные. Давайте рассмотрим некоторые крайние случаи:
- Пустые строки
- Не-строковые значения (null, undefined, числа, объекты)
- Различные представления часовых поясов
Улучшение нашей функции
Давайте обновим файл isISODate.js
, чтобы он мог обрабатывать эти крайние случаи:
- Откройте файл
isISODate.js
в WebIDE.
- Замените существующий код на этот улучшенный вариант:
/**
* 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;
Теперь эта улучшенная функция:
- Проверяет, является ли входные данные строкой перед обработкой.
- Обрабатывает пустые строки.
- Использует блок try-catch для обработки любых ошибок, которые могут возникнуть.
- По-прежнему выполняет нашу основную логику валидации.
Тестирование нашей улучшенной функции
Давайте создадим один последний тестовый файл, чтобы проверить нашу улучшенную функцию на крайних случаях:
- Создайте новый файл с именем
edgeCaseTester.js
.
- Добавьте следующий код:
// 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());
- Запустите тестовый файл:
node edgeCaseTester.js
Применение в реальном мире
В реальном приложении наша функция isISOString
может быть использована в таких сценариях, как:
- Валидация пользовательского ввода в поле даты.
- Проверка дат, полученных от внешних API.
- Гарантирование единообразного формата дат в базе данных.
- Валидация данных перед обработкой.
Например, в функции валидации формы:
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 };
}
Теперь улучшенная функция достаточно надежная, чтобы обрабатывать неожиданные входные данные и обеспечивать надежную валидацию строк дат в формате ISO.