Php 用逗号或新行分析表单textarea
我在表单中有一个文本区域,允许用户输入由换行符或逗号分隔的数字列表。我需要将他们输入的数字输入到数组中。不幸的是,我的代码不是一直有效。如果用户输入逗号分隔的数据和换行符,则逗号将保留在结果数组中。此外,如果他们在textfield的末尾添加一个换行符,那么它会在数组中输入一个空值。我的代码如下:Php 用逗号或新行分析表单textarea,php,Php,我在表单中有一个文本区域,允许用户输入由换行符或逗号分隔的数字列表。我需要将他们输入的数字输入到数组中。不幸的是,我的代码不是一直有效。如果用户输入逗号分隔的数据和换行符,则逗号将保留在结果数组中。此外,如果他们在textfield的末尾添加一个换行符,那么它会在数组中输入一个空值。我的代码如下: $data = preg_split( "[\r\n]", $_POST[ 'textarea' ] ); if (count($data) == 1) { $string = $data[0
$data = preg_split( "[\r\n]", $_POST[ 'textarea' ] );
if (count($data) == 1) {
$string = $data[0];
$data = explode(',', $string);
}
我希望能得到一些帮助来解决我遇到的问题。一个可能的原因可能是您缺少分隔符,
+
无法找到更多的分隔符,而不是:
$data = preg_split( "[\r\n]", $_POST[ 'textarea' ] );
尝试:
您应该从空白处“修剪”用户输入:
$data = preg_split("[\r\n"], trim($_POST["textarea"]));
这将删除前导和尾随空格。通过将逗号指定为要修剪的第二个参数,还可以删除前导和尾随逗号,以防止使用csv时出现空数组索引:
trim($data, ",");
有关修剪的详细信息,请参见
这将被换行符或逗号分割,并消除任何尾随的换行符。“由换行符或逗号分隔的数字列表”所以,你不在乎它是哪一个,或者是否有逗号和换行符?那么,为什么不简单地将这三个字符平等地用作分隔符,并允许“一个或多个”分隔符呢 印刷品
array(9) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
[3]=>
string(1) "4"
[4]=>
string(1) "5"
[5]=>
string(1) "6"
[6]=>
string(1) "7"
[7]=>
string(1) "8"
[8]=>
string(1) "9"
}
array(9) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
[3]=>
string(1) "4"
[4]=>
string(1) "5"
[5]=>
string(1) "6"
[6]=>
string(1) "7"
[7]=>
string(1) "8"
[8]=>
string(1) "9"
}
如果要将多个空间剥离为单个空间,请在前后修剪空间,并允许使用分号“;”而不仅仅是逗号“,”,然后这段代码对我有效。我相信这可以在一个单独的preg_分割和/或preg_替换完成
$string = ' 1,2,3
4,5,;,,
;6,
7
, 8 ,9; 10 ; 11;';
$tmp = preg_split("/[\r\n,;]+/", $string, -1, PREG_SPLIT_NO_EMPTY);
foreach($tmp as $val)
{
$val = trim(preg_replace('!\s+!', ' ', $val));
if($val != "")
$data[] = $val;
}
var_dump($data);
/* Returns
array(11) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
[3]=>
string(1) "4"
[4]=>
string(1) "5"
[5]=>
string(1) "6"
[6]=>
string(1) "7"
[7]=>
string(1) "8"
[8]=>
string(1) "9"
[9]=>
string(2) "10"
[10]=>
string(2) "11"
}
*/
我已经尝试了您的代码,但不幸的是,如果同时存在逗号和换行符,则无法正确分割表单数据。例如,如果用户输入:3,(此处换行)4,(此处换行)4,(此处换行)6,则它无法处理它。如果可能的话,我想对服务器端进行分类。我想说的是,它分开了两次。太好了-谢谢!我会查一下你加入的preg_split的额外部分,以便我完全理解你所做的。多么好的解决方案,prost mein Freund!我还要向正则表达式中添加空格(\s),以便删除数字前后的空格。它看起来像
[\r\n\s]
。
array(9) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
[3]=>
string(1) "4"
[4]=>
string(1) "5"
[5]=>
string(1) "6"
[6]=>
string(1) "7"
[7]=>
string(1) "8"
[8]=>
string(1) "9"
}
$input = '1,2,3
4,5,,,,
,6,
7
,8,9
';
$data = str_replace(array("\r", "\n"), ',', $input);
$data = array_filter(explode(',', $data));
var_dump(array_values($data));
array(9) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
[3]=>
string(1) "4"
[4]=>
string(1) "5"
[5]=>
string(1) "6"
[6]=>
string(1) "7"
[7]=>
string(1) "8"
[8]=>
string(1) "9"
}
$string = ' 1,2,3
4,5,;,,
;6,
7
, 8 ,9; 10 ; 11;';
$tmp = preg_split("/[\r\n,;]+/", $string, -1, PREG_SPLIT_NO_EMPTY);
foreach($tmp as $val)
{
$val = trim(preg_replace('!\s+!', ' ', $val));
if($val != "")
$data[] = $val;
}
var_dump($data);
/* Returns
array(11) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
[3]=>
string(1) "4"
[4]=>
string(1) "5"
[5]=>
string(1) "6"
[6]=>
string(1) "7"
[7]=>
string(1) "8"
[8]=>
string(1) "9"
[9]=>
string(2) "10"
[10]=>
string(2) "11"
}
*/