Сервер: уточнить правила имён каналов и поиск треда

This commit is contained in:
AidarKC
2026-07-25 21:16:15 +04:00
parent 8ddf592ffc
commit 1dddb5fb3c
7 changed files with 34 additions and 35 deletions
+4 -3
View File
@@ -45,12 +45,13 @@ export function render({ navigate }) {
form.className = 'card stack';
form.innerHTML = `
<strong class="channel-head-title">Создание канала</strong>
<p class="channel-head-meta">Можно использовать только латиницу, цифры, _ и -.</p>
<p class="channel-head-meta">Длина названия: от 1 до 32 символов.</p>
<p class="channel-head-meta">Разрешены только латинские буквы, цифры, _ и -.</p>
<p class="channel-head-meta">Длина названия: от 3 до 32 символов. Название не должно состоять только из цифр.</p>
<p class="channel-head-meta">Можно использовать большие и маленькие буквы, но уникальность проверяется без учёта регистра.</p>
<div class="meta-muted">Тип канала фиксирован: публичный (1).</div>
<label for="channel-name">Название канала</label>
<input id="channel-name" class="input" maxlength="32" placeholder="Например: my_channel-1" required />
<input id="channel-name" class="input" maxlength="32" placeholder="Например: My-Channel_1" required />
<div id="channel-name-error" class="meta-muted inline-error"></div>
<label for="channel-description">Описание канала (необязательно)</label>
+7 -6
View File
@@ -1,6 +1,7 @@
const MIN_LEN = 1;
const MIN_LEN = 3;
const MAX_LEN = 32;
const ALLOWED_CHARS_RE = /^[A-Za-z0-9_-]+$/;
const DIGITS_ONLY_RE = /^[0-9]+$/;
export function normalizeChannelDisplayName(value) {
if (value == null) return '';
@@ -37,8 +38,8 @@ export function validateChannelDisplayName(value) {
if (!ALLOWED_CHARS_RE.test(normalized)) {
return { ok: false, code: 'bad_chars', normalized, slug: '' };
}
if (normalized === '0') {
return { ok: false, code: 'reserved', normalized, slug: '' };
if (DIGITS_ONLY_RE.test(normalized)) {
return { ok: false, code: 'digits_only', normalized, slug: '' };
}
const slug = toCanonicalChannelSlug(normalized);
@@ -54,13 +55,13 @@ export function channelNameErrorText(code) {
case 'blank':
return 'Введите название канала.';
case 'too_short':
return 'Название слишком короткое: минимум 1 символ.';
return 'Название слишком короткое: минимум 3 символа.';
case 'too_long':
return 'Название слишком длинное: максимум 32 символа.';
case 'bad_chars':
return 'Разрешены только латиница, цифры, _ и -.';
case 'reserved':
return 'Название "0" зарезервировано.';
case 'digits_only':
return 'Название канала не должно состоять только из цифр.';
default:
return 'Некорректное название канала.';
}
+2 -1
View File
@@ -86,11 +86,12 @@ export function toUserMessage(error, fallback = 'Действие не выпо
code === 'BAD_CHANNEL_NAME' ||
text.includes('channel name must match') ||
text.includes('channelname contains unsupported') ||
text.includes('channelname must not contain only digits') ||
text.includes('channelname length must be 3..32') ||
text.includes('channelname length must be 1..32') ||
text.includes('bad_channel_name')
) {
return 'Некорректное название канала. Разрешены кириллица, латиница, цифры, пробел, _ и - (1..32 символа).';
return 'Некорректное название канала. Разрешены только латинские буквы, цифры, _ и -. Длина: 3..32. Название не должно состоять только из цифр.';
}
if (text.includes('channel name is required') || text.includes('введите имя канала')) {