Количество символов в строке и количество строк в текстовой области - PullRequest
3 голосов
/ 31 августа 2009

Я пытаюсь создать многострочное текстовое поле на странице php, и я хочу проверить, чтобы, если пользователь не может вставить более 50 символов в строку или более 50 строк. Идея состоит в том, что пользователь может вставить что-то из электронной таблицы, но если в одной строке содержится более 50 символов, остальные будут отброшены и не будут вставлены в следующую строку. Вот почему я хочу избежать идеи иметь 50 отдельных текстовых полей.

Было бы идеально, если бы это можно было сделать в javascript (или в самом php, но я не видел ничего подобного в php).

Спасибо!

ОБНОВЛЕНИЕ: Спасибо за все эти ответы, но это сработает только после того, как пользователь отправит форму, верно? Например, если максимальное число строк равно 3 вместо 50, а пользователь вставляет 100 последовательных символов, а затем разрыв строки, у него останется только 50 символов, что ограничивает ввод 2 вместо 3. Надеюсь, мне было ясно ...

Ответы [ 5 ]

1 голос
/ 31 августа 2009

Вы можете разбить это на два процесса:

1: Используйте jQuery (или любую другую библиотеку JavaScript, которая вам нравится), чтобы проверить ограничение в 50 символов для каждой строки. плагин проверки предлагает множество функциональных возможностей, которые могут быть полезны.

2: используйте php для двойной проверки на случай, если использование отключит JavaScript на стороне браузера. Эта функция должна быть включена при отправке из-за отключения JavaScript (поэтому нет Ajax)

Итак, вам нужно будет прочитать текстовую область в массив, используя разрыв строки \ n, чтобы разбить текст на каждый элемент в массиве. Теперь проверьте каждый элемент массива на ограничение в 50 символов. И теперь, когда у вас есть весь текст в массиве, вы также можете проверить строки по размеру массива.

1 голос
/ 31 августа 2009

PHP:

$max_length = 50;
$lines = explode("\n", $input);
for($i = 0; $i < count($lines); $i++)
{
    $lines[$i] = rtrim($lines[$i]); // just incase there's a "\r"
    $lines[$i] = (strlen($lines[$i]) <= 50 ? 
                      $lines[$i] : 
                      substr($lines[$i], 0, 50));
}
$input = implode("\n", $lines);
1 голос
/ 31 августа 2009

Вот так, основываясь на коде, предоставленном Мэтью, но он короче и также ограничивает количество строк.

$lines = array_slice(explode("\n", $string), 0, 50); // max 50 lines

foreach ($lines as $key => $value)
{
    $lines[$key] = substr(trim($value), 0, 50); // max 50 chars
}

$string = implode("\n", $lines);
0 голосов
/ 31 августа 2009

Найти длину самой длинной строки:

$length = array_reduce(array_map(explode("\n", $string), 'strlen'), 'max', 0);
0 голосов
/ 31 августа 2009

Используйте explode ("\ n", $ str) , чтобы разбить данные текстовой области на строки, затем проверьте длину каждой строки.

Подобный метод может быть использован на стороне пользователя с Javascript, но если вы хотите обеспечить безопасность, вы должны сделать это на стороне PHP, потому что Javascript можно обойти.

В конечном счете, все зависит от того, будет ли это облегчать жизнь пользователя или предотвращать неприятности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...