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_tagstrim 是必需的。


编辑:这是我想出的:

/**
 * 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 是的,如果您只考虑标题。由于这超出了标题的长度,trimstrip_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,留下单个空格的主要内容,如果未能解决你的问题,请参考以下文章

散点图中的单个 alpha 值

grep

Android:在画布上为单个路径的 alpha 设置动画

如何在 Django 中删除单个模型,并留下其他模型

将 Google Play Developer API 限制为单个应用程序,并且仅限 alphas/betas

通过字母在画布上绘制文本,以控制单个字母的alpha,同时与中心对齐