2009-08-31 41 views
3

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

这将是理想的,如果这可以在JavaScript(或PHP本身,但我没有看到任何像它在PHP中)完成。

谢谢!

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

回答

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

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

类似的方法可以在Javascript的用户端使用,但如果你想确保安全,你必须在PHP端做,因为JavaScript可以绕过。

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

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

你有一个bug,它是rtrim()不trimr()。 –

0

查找长度:

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

你可以将其分为两个过程:

1:使用jQuery(或什么都你喜欢的JavaScript库),以验证50每行的字符行数限制。 validation plugin提供了许多可能有用的功能。

2:使用php进行双重检查,以防使用禁用浏览器端的JavaScript。由于JavaScript被禁用(因此没有Ajax),这必须是提交功能

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

+0

提交使用JavaScript更改标志,并且操作位于同一页面上。 我认为没有任何问题,如果javascript被停用,页面将无法工作。 – nightshadex101

+1

@ nightshadex101,我认为你和我有不同的定义,'不要认为有任何问题。'如果你的用户遇到了一个破损的页面,他们为什么会回到你身边,你是否有一个被俘的观众? O.O –

+0

我同意@ricebowl,如果启用或不启用Javascript,用户应该体验相同的操作(如果不是非常接近),这就是为什么您还要执行后端检查/功能。另一种方法(不建议但可以完成)是向最终用户显示一条消息,告诉他们需要启用JavaScript(如果禁用了JavaScript),并显示正确的页面(如果已启用)。不过,我强烈建议不要这种方法,因为它不是良好的编码实践以及用户体验。 –