Url slug但最终没有

时间:2016-01-19 22:44:33

标签: regex

这个preg_replace使用 - 例如来自字符串示例文本的URL:

http://example.com/example-text-here

但是如果字符串有类似示例(文本)的东西(这里)它像下面那样:

http://example.com/example-text-here- 

   $url = preg_replace("![^a-z0-9]+!i", "-", strtolower(htmlspecialchars(@$_POST["name"])));

最后我不知道 -

1 个答案:

答案 0 :(得分:1)

您可以围绕其中一个值使用捕获组并使用替换组。然后,检查preg_replace_callback回调中的组:

$url = preg_replace_callback("/([^a-z0-9]+)$|[^a-z0-9]+/i", function ($m) { 
          return isset($m[1]) ? "" : "-";
       }, $str);

请参阅IDEONE demo

正则表达式解释

  • ([^a-z0-9]+)$ - 第1组匹配字母和数字以外的1个或多个字符,直到字符串结尾
  • | - 或......
  • [^a-z0-9]+ - 除字母和数字以外的1个或多个字符

使用isset检查第一个组是否匹配,如果是,我们将替换为空,否则替换为-

但是,Robbie's suggestion使用$url = trim($url, '-')的第二步可能更具可读性。见trim help

  

从字符串的开头和结尾剥去空格(或其他字符)