Когда заголовок читается, я пытаюсь заменить все не-альфа-символы и заменить все двойные (или более) белые пробелы на один. Я просто не могу обойти вещи в белых помещениях.
Пока моя строка preg_replace
:
$result = trim( preg_replace( '/\s+/', '', strip_tags( $data->parent_label ) ) );
Примечание. strip_tags
и trim
.
EDIT: Это то, что я придумал:
/** * Removes all non alpha chars from a menu item label * Replaces double and more spaces into a single whitespace * * @since 0.1 * @param (string) $item * @return (string) $item */ public function cleanup_item( $item ) { // Regex patterns for preg_replace() $search = [ '@<script[^>]*?>.*?</script>@si', // Strip out javascript '@<style[^>]*?>.*?</style>@siU', // Strip style tags properly '@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags '@<![\s\S]*?–[ \t\n\r]*>@', // Strip multi-line comments including CDATA '/\s{2,}/', '/(\s){2,}/', ]; $pattern = [ '#[^a-zA-Z ]#', // Non alpha characters '/\s+/', // More than one whitespace ]; $replace = [ '', ' ', ]; $item = preg_replace( $search, '', html_entity_decode( $item ) ); $item = trim( preg_replace( $pattern, $replace, strip_tags( $item ) ) ); return $item; }
Возможно, последняя strip_tags()
не нужна. Это просто, чтобы быть уверенным.
$patterns = array ( '/\W+/', // match any non-alpha-numeric character sequence, except underscores '/\d+/', // match any number of decimal digits '/_+/', // match any number of underscores '/\s+/' // match any number of white spaces ); $replaces = array ( '', // remove '', // remove '', // remove ' ' // leave only 1 space ); $result = trim(preg_replace($patterns, $replaces, strip_tags( $data->parent_label ) ) );
… должен делать все, что вы хотите
Вы говорите, что вместо пробелов вместо пробела пробел. Второй параметр для preg_replace – пустая строка.
замените все двойные (или более) белые пробелы на один
Для этого вам необходимо:
preg_replace( '/\s+/', ' ', $subject)
В вашей версии вы удаляете все последовательности пробелов одним или несколькими элементами.