這是如何可以做到的,在幾行:Preg_replace可以一次性完成多個搜索和替換操作嗎?
// $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"
我quoestion集中在結合兩個的preg_replace()行成一個的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;
}
}
這種方式驗證方法(正則表達式)如果需要,可以用這樣的輸入數據而變化。
+1這完全一樣的工作。相同的替換順序,兩次替換運行,一個接一個。很好。 – hakre 2012-04-17 14:06:05
@hakre我喜歡你編輯的方式。只是好奇,這樣做,你甚至需要$模式和$替換變量?你可以讓陣列是匿名的嗎? – SupremeDud 2012-04-17 14:15:17
@SupremeDude:從技術上講,你不需要這些,因爲他們給參數命名,所以我把他們留在這裏,所以更容易理解什麼是什麼。但是你可以說這是糖。 – hakre 2012-04-17 14:17:11