2

完全に数値で作成されたコンマ区切りの文字列であるユーザー入力をクリーンアップする最も効率的な方法は何ですか?

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;}

それで、それを展開してから、配列のすべての要素を上記のコードでチェックするか、「、」のすべての出現箇所を「」に置き換えてから、全体が数値であることを確認する必要がありますか? 皆さんはどう思いますか?

4

4 に答える 4

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

CSVであり、数字やカンマの前後にスペースが含まれている可能性があり、引用符が含まれている場合でも、正規表現を使用して一致するかどうかを確認することをお勧めします

于 2009-11-17T16:30:27.130 に答える
2
if (!preg_match('/\A\d+(,\d+)*\z/', $input)) die('bad input');
于 2009-11-17T16:31:31.220 に答える
0

正しく形成されていない場合に単純に拒否するのではなく、コンマ区切りリストを変換したい場合はarray_map()、明示的なループを記述して回避することができます。

$sanitized_input = implode(",", array_map("intval", explode(",", $input)));
于 2009-11-17T17:02:48.477 に答える
0

私は単純な入力のエラー チェックの代わりにフィルター処理を行いますが、単に私が怠け者であるからだと思いますが、通常、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*

?>

コードとコードパッドの出力は次のとおりです。

http://codepad.org/YfSenm9k

于 2009-11-17T17:19:55.580 に答える