缩短此功能

时间:2012-05-23 15:48:20

标签: php regex url

我编写了这段代码来为链接准备标题,但我认为它有点笨重,我想知道是否有更好理解正则表达式的人能够减少以下功能(通过合并相关的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)))));

}

输入及其输出的示例:

输入:

  

BRAND NEW - 手套,2个装//这里有多个空格但是blockquote不允许我显示它们

输出:

  

全新-手套-2-包

4 个答案:

答案 0 :(得分:3)

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

我也没有用引号替换引号,所以像“猫喵”这样的字符串不会成为“猫喵”。

答案 1 :(得分:2)

function prepareURLTitle($title)
{
   return preg_replace("[^A-Za-z0-9]+", "-", $title);
}

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

答案 2 :(得分: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);

举个例子......

$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-包

答案 3 :(得分:-1)

function prepareURLTitle($title)
{
   return preg_replace( "/[^a-zA-Z0-9]/", "-",str_replace("-", "",  $title));
}

DEMO:http://codepad.org/lPSQQBys

输出:

  

全新 - 手套 - 2-包