每行的字符数和每个textarea限制的行数

时间:2009-08-31 13:39:19

标签: php javascript textarea

我正在尝试在php页面中创建一个多行textarea,我想验证如果用户不能每行插入超过50个字符,或超过50行。 这个想法是用户可以从电子表格粘贴一些东西,但是如果一行超过50个字符,其余的将被丢弃,而不会插入下一行。这就是为什么我要避免使用50个单独的文本框的想法。

如果可以在javascript(或php本身,但我没有在php中看到任何类似的东西)完成这将是理想的。

谢谢!

更新:感谢所有的答案,但只有在用户提交表单后才会有效,对吧? 例如,如果最大行数为3而不是50,并且用户插入100个连续字符,然后换行,则只剩下50个字符,将输入限制为2而不是3。 希望我很清楚...

5 个答案:

答案 0 :(得分:1)

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 :(得分:1)

这是基于马修提供的代码,但这个更短,也限制了行数。

$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);

答案 2 :(得分:1)

您可以将其分解为两个过程:

1:使用jQuery(或您喜欢的JavaScript库)验证每行的50个字符行限制。 validation plugin提供了许多可能有用的功能。

2:使用php进行双重检查以防万一用户在浏览器端禁用JavaScript。由于JavaScript被禁用(所以没有Ajax)

,这必须是提交功能

因此,您需要做的是使用换行符将文本区域读入数组,以将文本拆分为数组中的每个元素。现在检查每个数组元素是否有50个字符的限制。现在你将所有文本都放入一个数组中,你也可以通过数组大小来检查行。

答案 3 :(得分:0)

使用explode("\n", $str)将textarea数据分解为行,然后检查每行的长度。

可以在用户端使用类似的方法使用Javascript,但如果要确保安全性,则必须在PHP端执行此操作,因为可以绕过Javascript。

最终,这取决于这是为了让用户的生活更轻松还是防止发生不良事件。

答案 4 :(得分:0)

查找最长行的长度:

$length = array_reduce(array_map(explode("\n", $string), 'strlen'), 'max', 0);