【问题标题】:Multiple preg_replace on a variable变量上的多个 preg_replace
【发布时间】:2014-03-01 14:36:15
【问题描述】:

在一个变量上使用多个 preg_replace 和 str_replace 是否安全?

$this->document->setDescription(tokenTruncate(str_replace(array("\r", "\n"), ' ', preg_replace( '/\s+/', ' ',preg_replace("/[^\w\d ]/ui", ' ', $custom_meta_description))),160));   

这是我用来删除换行符、空格和所有非字母数字字符(不包括 unicode)的代码。最后一个 preg_replace 用于非字母数字字符,但点也被删除。有没有办法保留点、逗号、- 分隔符?

谢谢!

【问题讨论】:

  • 您能举一个这样的字符串及其预期输出的例子吗?

标签: php preg-replace


【解决方案1】:

你想要的可以在一个表达式中完成:

preg_replace('/(?:\s|[^\w.,-])+/u', ' ', $custom_meta_description);

它可以替换空格(制表符、换行符)或非单词、数字或标点符号。

【讨论】:

    【解决方案2】:

    您想要做的事情可以通过一个 preg_replace 语句来实现:

    $str = preg_replace('#\P{Xwd}++#', '', $str);
    $this->document->setDescription($desc, tokenTruncate($str, 160));
    

    上述preg_replace() 语句将替换提供的字符串中不是Unicode 数字、字母或空格的任何内容。

    有关详细信息,请参阅Unicode Reference

    【讨论】:

    • 嗯,输出是这样的“Topeak Sada dielensk� ho n�” - �应该是á
    • \p{Xan} 不包括下划线_。最好使用\p{Xwd}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多