Какие основные критерии валидации логина пользователя?

Ответ

Валидация логина — это проверка входных данных на соответствие бизнес-правилам и требованиям безопасности.

Основные критерии валидации:

  1. Длина: Обычно от 3 до 20-30 символов. Проверяется на минимум и максимум.
  2. Допустимые символы: Чаще всего разрешены:
    • Латинские буквы (a-z, A-Z)
    • Цифры (0-9)
    • Символы: подчеркивание (_), точка (.), дефис (-)
    • Запрещены: пробелы, спецсимволы (!@#$%^&*()).
  3. Уникальность: Логин должен быть уникален в системе (проверяется запросом к БД).
  4. Чувствительность к регистру: Система должна четко определять, является ли логин регистрозависимым (например, User vs user).
  5. Зарезервированные имена: Запрещено использовать служебные имена (admin, root, support, system).
  6. Санитизация (очистка): Удаление начальных и конечных пробелов (trim).

Пример функции валидации на JavaScript:

function validateLogin(login) {
    // 1. Санитизация
    login = login.trim();

    // 2. Проверка длины
    if (login.length < 3 || login.length > 20) {
        return { isValid: false, error: 'Длина логина должна быть от 3 до 20 символов.' };
    }

    // 3. Проверка допустимых символов с помощью регулярного выражения
    const allowedCharsRegex = /^[a-zA-Z0-9_.-]+$/;
    if (!allowedCharsRegex.test(login)) {
        return { isValid: false, error: 'Логин может содержать только буквы, цифры, символы _ . -' };
    }

    // 4. Проверка на зарезервированные имена
    const reservedLogins = ['admin', 'root', 'support', 'system', 'administrator'];
    if (reservedLogins.includes(login.toLowerCase())) {
        return { isValid: false, error: 'Этот логин зарезервирован системой.' };
    }

    // 5. Уникальность проверяется отдельным запросом к серверу
    return { isValid: true, error: null };
}

// Использование
console.log(validateLogin('my_user-123')); // { isValid: true, ... }
console.log(validateLogin('admin'));       // { isValid: false, ... }

Важно: Валидация должна выполняться как на клиенте (для UX), так и обязательно на сервере (для безопасности).

Ответ 18+ 🔞

А, ну вот, опять про эти ваши логины, блядь! Сидишь такой, думаешь: «О, сейчас быстренько зарегаюсь, пойду по делу». А тебе — раз! — «логин невалидный», сука! И сидишь, блядь, полчаса, как дурак, подбираешь, чтобы и тебе нравилось, и этой хитрожопой системе.

Так вот, слушай сюда, что они от нас, от пользователей, хотят, эти ваши валидаторы, блядь. Это ж целая наука, ёпта!

На что они там, блядь, смотрят, как ядрёна вошь:

  1. Длина. Ну, понятное дело, не «й» и не «ааааааааааааааааааааааааааааааааааа». Обычно от трёх символов до двадцати-тридцати. Меньше — слишком просто, больше — уже пиздец какой-то никнейм, заебёшься вбивать.
  2. Буквы-циферки. Тут, блядь, строгость! Чаще всего разрешают только латиницу (a-z, A-Z), цифры (0-9) и какие-то жалкие символы вроде подчёркивания (_), точки (.) или дефиса (-). А пробелы, блядь, или знаки препинания (!@#$%) — это сразу в пизду! Не положено.
  3. Уникальность. Это вообще святое, блядь. Твой логин должен быть как отпечаток пальца — один на всю систему. Иначе как они тебя отличать будут от какого-нибудь другого «Vasya_Pupkin_1990»? Проверяется запросом в базу, там уже без вариантов.
  4. Регистр. Тут надо смотреть, ебать, система тупая или умная. В одних User и user — это одно и то же, в других — два разных чувака. Надо знать, на чём сидишь.
  5. Запрещёнка. Нельзя называться как босс, блядь! admin, root, support — это всё зарезервированные имена, для служебного пользования. Не лезь, куда не просят.
  6. Санитизация (очистка). Это когда ты, мудак, случайно пробелы в начале или в конце наставил. Умная система их сама срежет, как лишний жир. А тупая — возьмёт и залогинится с пробелами, потом нихуя не найдёт.

Вот, смотри, как это примерно выглядит в коде, если на JavaScript'е писать. Блок кода не трогаю, как договаривались, там всё правильно.

function validateLogin(login) {
    // 1. Санитизация
    login = login.trim();

    // 2. Проверка длины
    if (login.length < 3 || login.length > 20) {
        return { isValid: false, error: 'Длина логина должна быть от 3 до 20 символов.' };
    }

    // 3. Проверка допустимых символов с помощью регулярного выражения
    const allowedCharsRegex = /^[a-zA-Z0-9_.-]+$/;
    if (!allowedCharsRegex.test(login)) {
        return { isValid: false, error: 'Логин может содержать только буквы, цифры, символы _ . -' };
    }

    // 4. Проверка на зарезервированные имена
    const reservedLogins = ['admin', 'root', 'support', 'system', 'administrator'];
    if (reservedLogins.includes(login.toLowerCase())) {
        return { isValid: false, error: 'Этот логин зарезервирован системой.' };
    }

    // 5. Уникальность проверяется отдельным запросом к серверу
    return { isValid: true, error: null };
}

// Использование
console.log(validateLogin('my_user-123')); // { isValid: true, ... }
console.log(validateLogin('admin'));       // { isValid: false, ... }

И главное, блядь, что ты должен запомнить, как «Отче наш»: вся эта хуйня должна проверяться и на сервере тоже! На клиенте — это просто для твоего удобства, чтобы быстро ошибку показать. А настоящий, блядь, мужик-валидатор сидит на сервере и проверяет всё по новой, потому что всякие умники могут запросы подделывать. Без этого — пиши пропало, безопасность на нуле, ебать.