preg_replace non-alpha, оставить одиночные пробелы

Когда заголовок читается, я пытаюсь заменить все не-альфа-символы и заменить все двойные (или более) белые пробелы на один. Я просто не могу обойти вещи в белых помещениях.

Пока моя строка 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) 

В вашей версии вы удаляете все последовательности пробелов одним или несколькими элементами.