Php 缩短此功能

Php 缩短此功能,php,regex,url,Php,Regex,Url,我写这段代码是为了准备一个链接的标题,但我认为它有点笨重,我想知道如果有人对regex有更好的理解,是否能够减少以下函数(通过合并相关的preg_替换)。我需要它去除所有当前连字符,去除多个空格,确保除了替换连字符的空格外,它是唯一的字母数字,用一个连字符替换所有空格,并确保字符串不以连字符开头: function prepareURLTitle($title) { return preg_replace("/\A-/", "", str_replace(" ", "-", preg_repl

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

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包//这里有多个空间,但blockquote不允许我展示它们

输出:

全新双包手套

演示:

输出:

全新--手套--两包

演示:

输出:

全新--手套--两包

我还将引号替换为nothing,因此像“猫的喵喵”这样的字符串不会变成“The-cat-s-meow”

我还将引号替换为nothing,因此像“猫的喵喵”这样的字符串不会变成“The-cat-s-meow”

这应该行得通。您需要将多个非字母数字字符替换为一个“-”

这应该行得通。您需要将多个非字母数字字符替换为一个“-”

举个例子

$title = '  BRAND   NEW -   Gloves, 2 pack -  ';
echo 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件套
成为
全新-手套-2件套
@kevlar1818我修复了它(某种程度上)。这只会用连字符替换所有非字母数字字符。特别是像“foo:bar”这样的例子会变成“foo--bar”,而那应该变成“foo-bar”。这会导致
全新-手套,2块
变成
全新-手套--2块
@kevlar1818我修正了它(某种程度上)。这只会用连字符替换所有非字母数字字符。特别是像“foo:bar”这样的例子会变成“foo--bar”,而这应该变成“foo-bar”。
function prepareURLTitle($title)
{
   return preg_replace("[^A-Za-z0-9]+", "-", $title);
}
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);