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