0

我编写了这段代码来为链接准备一个标题,但我认为它有点笨重,我想知道是否有人对正则表达式有更好的理解,是否能够减少以下函数(通过合并相关的 preg_replaces)。我需要它来去除所有当前的连字符,去除多个空格,确保除了替换空格的连字符之外它只是字母数字,用单个连字符替换所有空格并确保字符串不以连字符开头:

function prepareURLTitle($title)
{

return preg_replace("/\A-/", "", str_replace(" ", "-", preg_replace("/[^a-zA-Z0-9\s]/", "", preg_replace('/\s\s+/', ' ', preg_replace('/\s?-/', '', $title)))));

}

输入示例及其输出:

输入:

全新 - 手套,2 件装//此处有多个空格,但块引用不允许我显示它们

输出:

全新手套 2 件装

4

4 回答 4

3
trim(preg_replace('`[^a-z0-9]+`i','-',str_replace("'",'',$title)),'-')

我还用任何内容替换了引号,因此像“The cat's meow”这样的字符串不会变成“The-cat-s-meow”。

于 2012-05-23T15:52:12.760 回答
2
function prepareURLTitle($title)
{
   return preg_replace("[^A-Za-z0-9]+", "-", $title);
}

这应该有效。您需要用单个“-”替换多个非字母数字字符。

于 2012-05-23T15:59:04.103 回答
1
preg_replace('~[^a-z\d]+~i','-',preg_replace('~^[^a-z\d]+(.*?)[^a-z\d]+$~i','$1',$title));
// or
preg_replace(array('~^[^a-z\d]+(.*?)[^a-z\d]+$~i','~[^a-z\d]+~i'),array('$1','-'),$title);

举个例子……</p>

$title = '  BRAND   NEW -   Gloves, 2 pack -  ';
echo preg_replace(array('~^[^a-z\d]+(.*?)[^a-z\d]+$~i','~[^a-z\d]+~i'),array('$1','-'),$title);

将返回

全新手套 2 件装

于 2012-05-23T16:00:10.820 回答
-1
function prepareURLTitle($title)
{
   return preg_replace( "/[^a-zA-Z0-9]/", "-",str_replace("-", "",  $title));
}

演示:http ://codepad.org/lPSQQBys

输出:

全新--手套--2 件装

于 2012-05-23T15:51:44.040 回答