Как в JavaScript реализовать валидацию имен файлов, запрещая использование символов / : * ? [ ] ‘ для корректного сохранения на диске?

Валидация имён файлов — важная задача при разработке веб-приложений, особенно когда пользователь вводит название для сохранения файла на диске. Операционные системы Windows, Linux и macOS имеют разные ограничения, но существует общий набор символов, которые запрещены или вызывают проблемы: / : * ? [ ] ‘ и некоторые другие.

## Базовый подход с регулярным выражением

Самый простой способ — использовать регулярное выражение, которое проверяет наличие запрещённых символов:

javascript
function isValidFileName(name) {
const forbiddenChars = /[/\:*?[]’]/g;
return !forbiddenChars.test(name);
}

console.log(isValidFileName(‘my_file’)); // true
console.log(isValidFileName(‘my/file’)); // false
console.log(isValidFileName(«it’s_file»)); // false

## Функция с очисткой имени файла

Если нужно не просто проверить, но и автоматически исправить имя, можно заменить запрещённые символы на безопасный аналог:

javascript
function sanitizeFileName(name) {
return name.replace(/[/\:*?[]’]/g, ‘_’);
}

console.log(sanitizeFileName(‘report: 2024/01’)); // ‘report_ 2024_01’

## Расширенная валидация

Для более строгой проверки стоит учесть дополнительные правила:
— Имя не должно быть пустым или состоять только из пробелов.
— Имя не должно начинаться или заканчиваться точкой или пробелом (ограничение Windows).
— Длина имени не должна превышать 255 символов.
— Нельзя использовать зарезервированные имена Windows: CON, PRN, AUX, NUL, COM1–COM9, LPT1–LPT9.

javascript
function validateFileName(name) {
if (!name || name.trim().length === 0) {
return { valid: false, error: ‘Имя файла не может быть пустым’ };
}
if (name.length > 255) {
return { valid: false, error: ‘Имя файла слишком длинное (макс. 255 символов)’ };
}
const forbiddenChars = /[/\:*?[]’]/;
if (forbiddenChars.test(name)) {
return { valid: false, error: ‘Имя содержит запрещённые символы: / \ : * ? [ ] » };
}
if (/^[. ]|[. ]$/.test(name)) {
return { valid: false, error: ‘Имя не должно начинаться или заканчиваться точкой или пробелом’ };
}
const reserved = /^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(..*)?$/i;
if (reserved.test(name)) {
return { valid: false, error: ‘Зарезервированное имя файла’ };
}
return { valid: true, error: null };
}

## Применение в форме

javascript
document.getElementById(‘fileNameInput’).addEventListener(‘input’, function() {
const result = validateFileName(this.value);
const errorEl = document.getElementById(‘error’);
errorEl.textContent = result.valid ? » : result.error;
});

## Итог

Для надёжной валидации имён файлов в JavaScript используйте регулярные выражения с экранированием спецсимволов, проверяйте длину строки, наличие пробелов на краях и зарезервированные имена Windows. Такой подход обеспечит корректное сохранение файлов на любой операционной системе.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.