Пробелы и табуляция

228
04 июля 2017, 23:41

Здравствуйте! Хочу защитить форму ввода от невидимых символов на стороне сервера средствами PHP(пробел, табуляция). Т.е. когда пользователь вводит ТОЛЬКО пробелы или/и табуляцию то форма у меня отправляется и пустое значение записывается в базу. Как сделать чтобы такого не происходило?

Answer 1

Оказывается есть простое решение в самом php. ctype_space

Возвращает TRUE, если каждый символ в строке text создает какой-нибудь из пробельных символов, FALSE в противном случае. Кроме пробела, сюда также относятся символы табуляции, вертикальной табуляции, перевода строки, возврата каретки и перевода страницы.

http://php.net/manual/ru/function.ctype-space.php

if (ctype_space($content)) {               
    $content = null;
    header("Location: /");
    exit;
} else {
    $content = htmlspecialchars($content);
}
Answer 2

Я могу предложить вариант на стороне клиента - у input'ов задавай атрибут pattern. Туда положи регулярное выражение, в котором будет отслеживаться, находится ли в value ТОЛЬКО пробелы или табуляция. И таким же способом можно дополнительно проверять value на стороне клиента. По моему это решение. Pattern кстати не даст отправить сообщение, которое не проходит валидацию по заданному регулярному выражению.

Answer 3

У вас в конкретном типе поля, может быть конкретный тип информации. Валидируйте это просто перед отправкой/вставкой

Например так можно проверить имя пользователя. Состоит из английских букв и цифр, длинной минимм 2, максимум 20 символов

//Убрать ведущие и закрывающие пустые символы
$username = trim($username);
if (!preg_match("/^[a-z\d_]{2,20}$/i", $username)){
   echo "Что-то не так";
}
Answer 4

Можно регулярным выражением в php вырезать из поля все пробелы и табуляции, и после проверить длину символов поля, если длина после выреза пробелов и табов будет равна 0 - значит поле состояло только из пробелов и табов.

<?php
$name = $_POST['name'];
if( strlen($name) === 0 )
    die('Пустое поле');
// Вырезаем пробелы и табы
$name = preg_replace('/\s\t/', '', $name);
if( strlen($name) === 0 )
    die('Длина поля равна 0, значит были только табы и пробелы');
READ ALSO
Собрать значения или имена в массив PHP

Собрать значения или имена в массив PHP

Здравствуйте дорогие знатоки PHP, подскажите, столкнулся с такой проблемой, есть форма отправки данных, у неё скрытые input, этим скрытым inpit'aм...

181
Получить данные из поля формы, и передать в файл обработчик

Получить данные из поля формы, и передать в файл обработчик

Здравствуйте, Есть поле для загрузки файлов, нужно при помощи JavaScript взять файл из поля ,и передать в файл обработчик php Поле

213
Получение id option

Получение id option

Здравствуйте! Есть выпадающий список:

173
Запись куки Yii2

Запись куки Yii2

Здравствуйте, подскажите, как можно получить нормальную (без лишнего текста) запись куки из Yii2

228