Какой последовательности придерживаться при проверке поля ввода?

Ответ

Рекомендуется системный подход, от общих проверок к специфическим:

  1. Пустое значение: Проверка обязательности поля (required attribute/validation).
  2. Пробелы: Тримминг — пробелы в начале, конце, множественные внутри строки.
  3. Граничные значения: Минимальная и максимальная допустимая длина (Boundary Value Analysis).
  4. Некорректные данные (Negative testing):
    • Неверный формат (для email, телефона).
    • Запрещенные символы (эмодзи, SQL-инъекции типа ' OR '1'='1).
    • XSS-пэйлоуды (<script>alert(1)</script>).
  5. Корректные данные (Positive testing): Стандартные валидные значения.
  6. Дополнительные сценарии:
    • Копирование/вставка (Ctrl+V).
    • Международные символы (IDN, email с кириллицей имя@пример.рф).
    • Ввод данных, превышающих длину поля (проверка усечения).

Пример чек-листа для поля "Email":

// 1. Пустое
"" -> "Поле обязательно"
// 2. Пробелы
"  user@mail.com  " -> автоматический тримминг до "user@mail.com"
// 3. Длина
"a@b.c" (мин.) -> OK
// 4. Неверный формат
"user@mail" -> "Неверный формат email"
// 5. Валидное значение
"valid.user@example-domain.com" -> OK
// 6. SQL-инъекция
"' OR 1=1;--" -> "Недопустимые символы"

Ответ 18+ 🔞

О, смотри-ка, какой у нас тут системный подход подъехал. Ну давай, разложим по полочкам, как настоящие инженеры, блядь. Только без этой вашей занудной хуйни, а по-человечьи.

Значит, слушай сюда, стратегия такая, чтобы не обосраться на ровном месте. Идём от простого к сложному, как в армии: сначала проверить, есть ли вообще солдат в строю, а потом уже смотреть, не кривой ли у него хер.

  1. Пустота. Первым делом — хули поле пустое? Нажал «отправить», а там нихуя. Должно вылезти что-то вроде «Заполни, мудила, не видишь, что ли?». Валидация на required или там ручками.
  2. Пробелы. Ах ты, хитрая жопа! Начальные, конечные, да ещё и между словами натыкал. Тут без вариантов — тримминг в ход. Все лишние пробелы нахуй, чтобы " вася " стало просто "вася".
  3. Длина. Ну тут всё понятно. Минимум — один символ, максимум — сто. Пробуем впихнуть один символ — должно прокатить. Пробуем впихнуть сто один — должно отшить с криком «Многовато будет, дружок!». Граничные значения, ёпта.
  4. Откровенная дичь (Негативное тестирование). Вот тут начинается веселье, блядь.
    • Формат кривой. Для email — нет собаки или точки. Должно ругаться.
    • Запрещённая хуйня. Пытаешься всунуть SQL-инъекцию типа ' OR '1'='1 или скрипт <script>alert('пиздец')</script>. Поле должно либо экранировать эту хрень, либо сразу говорить «Иди нахуй со своими пэйлоудами».
  5. Нормальные данные (Позитивное тестирование). Ну а тут уже вводим что-то адекватное, типа normal.user@example.com. Всё должно быть збс, кнопка «Отправить» светится от счастья.
  6. Особые приколы.
    • Копипаст. Вставил из буфера — не должно всё сломаться.
    • Интернационализация. Кириллический домен, типа петя@почта.рф. Система должна это переварить, а не выдать ошибку про «неизвестные символы», как последняя мартышлюшка.
    • Переполнение. Вводишь текст длиннее, чем отведено в базе. Проверяем, не отвалится ли сервер, когда мы попробуем это сохранить. Должно либо обрезать, либо сказать «Уменьши, мудила, не влезает».

Вот тебе живой пример для поля «Email», чтоб ты понимал, о чём я:

// 1. Пустота — мать беспорядка
"" -> "Эй, поле-то пустое! Заполни!"

// 2. Пробелы — враги человечества
"  my@mail.com  " -> после тримминга должно стать "my@mail.com"

// 3. Длина — не твой размер
"a@b.c" (минимально валидная хрень) -> OK
"очень-очень-длинный-ёбаный-email-адрес-который-никто-не-станет-использовать@домен-с-ещё-более-длинным-названием-чтобы-доёбаться.com" -> "Слишком дохуя букв"

// 4. Кривые руки
"user@mail" (нет точки) -> "Это что за формат такой, а? Где точка, блядь?"
"' OR 1=1;--" -> "Ага, щас. SQL-инъекции не прокатят, иди отсюда."

// 5. Всё пучком
"good.user+tag@subdomain.example.co.uk" -> Валидация пройдена, ура.

// 6. Особые случаи
"копировал@из.документа" (вставка) -> Должно работать.
"кириллица@пример.рф" -> Должно работать (если система не говно).
"<script>alert('XSS')</script>@test.com" -> Должно либо экранироваться, либо блокироваться. Никаких алертов на странице!

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