export const K1_PROJECT_NAME_MAX_LENGTH = 96; export interface ProjectNameValidation { value: string; error: string | null; } const CONTROL_CHARACTER_OR_SURROGATE = /[\p{Cc}\p{Cs}]/u; export function normalizeProjectName(input: string): string { return input.normalize("NFKC").trim(); } export function validateProjectName(input: string): ProjectNameValidation { const value = normalizeProjectName(input); if (!value) { return { value, error: "Введите название проекта." }; } if (CONTROL_CHARACTER_OR_SURROGATE.test(value)) { return { value, error: "Название проекта не должно содержать управляющие символы.", }; } if (Array.from(value).length > K1_PROJECT_NAME_MAX_LENGTH) { return { value, error: `Название проекта должно быть не длиннее ${K1_PROJECT_NAME_MAX_LENGTH} символов.`, }; } return { value, error: null }; }