PHP-清理逗号分隔的字符串

PHP-清理逗号分隔的字符串,php,csv,user-input,sanitization,Php,Csv,User Input,Sanitization,清除完全基于数字的逗号分隔字符串的用户输入最有效的方法是什么 2,40,23,11,55 我在很多输入上使用这个函数 function clean($input){ $input=mysql_real_escape_string(htmlentities($input,ENT_QUOTES)); return $input; } 对于简单整数,我会: if (!filter_var($_POST['var'], FILTER_VALIDATE_INT)) {echo('error - bla

清除完全基于数字的逗号分隔字符串的用户输入最有效的方法是什么

2,40,23,11,55

我在很多输入上使用这个函数

function clean($input){ $input=mysql_real_escape_string(htmlentities($input,ENT_QUOTES)); return $input; }
对于简单整数,我会:

if (!filter_var($_POST['var'], FILTER_VALIDATE_INT)) {echo('error - bla bla'); exit;}
所以我应该分解它,然后用上面的代码检查数组中的每个元素,或者用“”替换所有出现的“,”,然后检查整个元素是否是一个数字?你们觉得怎么样

if (ctype_digit(str_replace(",", "", $input))) {
  //all ok. very strict. input can only contain numbers and commas. not even spaces
} else {
  //not ok
}

如果它是CSV,如果数字或逗号周围可能有空格,甚至可能有一些引号,最好使用正则表达式检查它是否匹配

如果您想转换逗号分隔的列表,而不是简单地拒绝它,如果它的格式不正确,您可以使用它并避免编写显式循环

if (!preg_match('/\A\d+(,\d+)*\z/', $input)) die('bad input');
$sanitized_input = implode(",", array_map("intval", explode(",", $input)));

我会对简单的输入进行过滤,而不是错误检查,尽管我想这只是因为我很懒,而且通常在web环境中,有太多的情况需要处理,这是我无法预料的:下面的简单过滤

<?php
$input = '234kljsalkdfj234a,a, asldkfja 345345sd,f jasld,f234l2342323@#$@#';
function clean($dirty){ // Essentially allows numbers and commas, just strips everything else.
    return preg_replace('/[^0-9,]/', "", (string) $dirty);
}

$clean = clean($input);

echo $clean;
// Result: 234234,,345345,,2342342323
// Note how it doesn't deal with adjacent filtered-to-empty commas, though you could handle those in the explode.  *shrugs*

您可能还需要删除空白-取决于正在处理的“csv”。感谢您没有注意到csv标记“两个答案都有效”,谢谢。不过我测试了它们,jitter的答案大约是它的4倍+1你们两个。我个人同意,我不需要检查错误,我只是过滤,但我注意到,当有两个逗号并列时,你的代码会插入零。