4

これは、数行で実行できる方法です。

// $str represents string that needs cleaning:
$str = " String with   line\nbreak and too  much spaces   ";
// Clean string with preg_replace():
$str = preg_replace('/[\x00-\x09\x0B-\x1F\x7F]|^ +| +$/', '', $str);
$str = preg_replace('/\x0A| +/', ' ', $str);

echo $str;
// Output:
"String with line break and too much spaces"

私の意見は、2 つの preg_replace() 行を組み合わせて、まったく同じ仕事をする 1 つの preg_replace() にすることに焦点を当てています。

それは可能ですか、それがどのように行われるべきか?


その動作にはさまざまな用途があります。私が求めているのは、正規表現を定数または変数として定義し、それをクラス関数内で使用してユーザー入力をクリーンアップおよび検証することです。

suchs クラスの簡略化された例:

class cleaner{
    protected $defined_methods = array(
    'TRIM' => '/ +/',
    'STRIP_CC' => '/[\x00-\x1F\x7F]/',
    'TRIM_STRIP_CC' => array('/[\x00-\x1F\x7F]/', '/ +/')
    );
    protected $defined_results = array(
    'TRIM' => ' ', 
    'STRIP_CC' => '',
    'TRIM_STRIP_CC' => array('', ' ')
    );

    function clean(array $input, array $methods){
        foreach ($input as $key => $data){
            $input[$key] = preg_replace($defined_methods[$methods[$key]], $defined_results[$methods[$key]], $data);
        }
        return $input;
    }
}

このように、検証方法 (regexp) は、必要に応じて入力データによって異なる場合があります。

4

2 に答える 2

7
$str = preg_replace(
    $patterns = array('/[\x00-\x09\x0B-\x1F\x7F]|^ +| +$/', '/\x0A| +/'),
    $replace  = array('',                                   ' '), 
    $str
);

を参照preg_replaceしてください。これは、次々と複数の置換をサポートします。

于 2012-04-17T13:59:54.217 に答える
0

もちろん; ただし、少し注意が必要です。

$str = trim(preg_replace('/[\x00-\x09\x0B-\x1F\x7F\s]*\s[\x00-\x09\x0B-\x1F\x7F\s]*/', ' ', $str));
于 2012-04-17T14:00:09.757 に答える