我使用这个正则表达式将歌曲名称格式化为url友好的别名。它用连字符替换一个或多个特殊字符和空白的连续实例。
$alias = preg_replace("/([^a-zA-Z0-9]+)/", "-", trim(strtolower($name)));
这很好,所以如果歌曲名称是This is *is* a (song) NAME
,它将创建别名this-is-a-song-name
。但是,如果名称在*This is a song (name)
的开头或结尾有特殊字符,它将创建-this-is-a-song-name-
,在每个结尾创建连字符。
我如何修改regex以如上所述进行替换,但用空格替换第一个和最后一个特殊字符。
您需要进行双重替换。
$str = '*This is a song (name)';
$s = preg_replace('~^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$~', '', $str);
echo preg_replace('~[^a-zA-Z0-9]+~', '-', $s);
您可以通过两个步骤执行:
- 在第一步中,删除字符串开头和结尾的特殊字符
- 在第二步中,您可以像现在一样重用regex
代码可能看起来像这样:
$alias = preg_replace("/(^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$)/", "", trim(strtolower($name));
$alias = preg_replace("/([^a-zA-Z0-9]+)/", "-", $alias);
(我还没有测试过,但你可能会有这个想法)