PHP、SQL:仅存储用户输入的两个换行符


PHP, SQL: Only store two line breaks from user input

用户可以这样输入:

<textarea name="sometext"></textarea>

我只想存储最多两个换行符。例如:

正确1(简单换行):

This should be stored
This should be stored
正确2:

This should be stored too
This should be stored too
错:

This should NOT be stored

This should NOT be stored

如果错误,应该自动转换为例2

如果您只想计算换行符,您可以使用substr_count():

if (substr_count($input, "'n") > 2) {
    echo 'Invalid input';
}

似乎你想避免一个以上的空白行,在这种情况下,以下应该是足够的。

 $l1 = "This should be stored
 This should be stored";
 $l2 = "This should be stored too
 This should be stored too";
 $l3 = "This should NOT be stored

 This should NOT be stored";
 $expected_l3 = "This should NOT be stored
 This should NOT be stored";

 $examples = array($l1, $l2, $l3);
 $results = array();
 foreach ($examples as $example) {
   $lines = explode("'n", $example);
   $result = array();
   $blankLine = False;
   foreach ($lines as $ii => $line) {
     $line = trim($line);
     if ($blankLine and !$line) {
       continue;
     }
     $blankLine = False;
     $result[] = $line;
     if (!$line) {
       $blankLine = True;
     } 
   }
   $results[] = implode("'n", $result);
 }
 assert($results[0] == $l1);
 assert($results[1] == $l2);
 assert($results[2] == $expected_l3);

您说您希望每个字符串最多存储2行新行。所以我们需要用这个字符串除以'n出现的次数。

$data = "This should be stored too'nThis should be stored too";
$lines = preg_split("/'n/", $data);
var_dump($lines);

$data2 = "This should NOT be stored'n'n'nThis should NOT be stored";

$lines = preg_split("/'n/", $data2);
var_dump($lines);
$newlines = 0;
for($i = 0; $i < count($lines); $i++) {
    if($lines[$i] == '') {
        $newlines++;
    }
}
if($newlines > 2) {
    // do the conersion here.
}

我觉得@Anonymous差不多有了。如果我明白你在寻找什么,它似乎应该像下面这样。

if(substr_count($input,"'n'n'n")>0){
     $input=str_replace("'n'n'n","'n'n",$input); 
}

这将查找两个换行符,如果找到,它将删除它们。