Вот как это можно сделать в нескольких строках:
// $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 (), которое выполняет точно такую же работу.
Возможно ли это, и как это сделать?
Существует много различных применений для такого поведения, которое я использую после определения regexp как константы или переменной, и использовать в функции класса для очистки и проверки ввода пользователя.
Упрощенный пример такого класса:
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) может меняться в зависимости от входных данных, если это необходимо.
$str = preg_replace( $patterns = array('/[\x00-\x09\x0B-\x1F\x7F]|^ +| +$/', '/\x0A| +/'), $replace = array('', ' '), $str );
См. preg_replace
, он поддерживает несколько замен друг за другом.
Конечно; это немного сложнее, хотя:
$str = trim(preg_replace('/[\x00-\x09\x0B-\x1F\x7F\s]*\s[\x00-\x09\x0B-\x1F\x7F\s]*/', ' ', $str));