preg_replace 非 alpha,留下单个空格
Posted
技术标签:
【中文标题】preg_replace 非 alpha,留下单个空格【英文标题】:preg_replace non-alpha, leave single whitespaces 【发布时间】:2012-01-09 20:57:19 【问题描述】:正如标题所示,我正在尝试替换所有非字母字符并将所有双(或更多)空格替换为单个空格。我根本无法绕过空白的东西。
到目前为止,我的preg_replace
线路:
$result = trim( preg_replace( '/\s+/', '', strip_tags( $data->parent_label ) ) );
注意:strip_tags
和 trim
是必需的。
编辑:这是我想出的:
/**
* 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
'/\s2,/',
'/(\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()
不是必需的。只是为了确定。
【问题讨论】:
***.com/questions/2326125/…的可能重复 @hafichuk 是的,如果您只考虑标题。由于这超出了标题的长度,trim
和 strip_tags
被排除在外,因为它们已经存在于代码行中。谢谢。
【参考方案1】:
$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 ) ) );
...应该做你想做的一切
【讨论】:
我选择你的,因为我是最完整的。谢谢。全部 +1【参考方案2】:您告诉它用空格代替空格,而不是单个空格。 preg_replace 的第二个参数是一个空字符串。
【讨论】:
【参考方案3】:将所有双(或更多)空格替换为单个空格
为此,您需要:
preg_replace( '/\s+/', ' ', $subject)
在您的版本中,您将使用一个或多个元素消除所有空白序列。
【讨论】:
我会改成 '/\s+$/' 但这是正确的答案。以上是关于preg_replace 非 alpha,留下单个空格的主要内容,如果未能解决你的问题,请参考以下文章