只接受字母和数字。用单个'替换他人 - '。 PHP

时间:2014-07-18 10:05:39

标签: php regex slug

在我的代码中,我有一个功能,可以删除所有non-alphabeticnon-numeric字符以及' - '。但问题是我的regex只是删除了与#39; - #39;相关的特殊字符。所以如果输入是

((hai..)how   are you?)

将更改为

--hai---how---are-you--

我需要将所有相邻的' - ' as one。并删除开始和结束的特殊字符。这就是上面的结果

 hai-how-are-you

我的功能是

function to_slug($string)
{
    $string = trim($string);
    return $string1 = strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $string)));
}

我得到了一个正则表达式代码,用于组合' - '。

trim(preg_replace('/-+/', '-', $str), '-')

但我不知道如何将其结合起来。请帮忙..提前谢谢

3 个答案:

答案 0 :(得分:3)

试试这个:

function toSlug($string){
    $string = trim($string);
    return strtolower(trim(preg_replace('/([^0-9a-z]+)/i', '-', $string), '-'));
}

答案 1 :(得分:1)

我认为这就是你想要的,

<?php
$string = '((hai..)how   are you?)';
$pattern = '~[^a-z0-9]+~';
$replacement = '-';
$str1 = preg_replace($pattern, $replacement, $string);
$pat = '~^-+|-+$~';
$rep = '';
echo preg_replace($pat, $rep, $str1);
?> //=> hai-how-are-you

答案 2 :(得分:1)

使用标记g

/[^A-Za-z0-9]+/g

它将匹配多个非字母数字字符,并将其替换为一个-。即。

(( hai ..)你如何将?)替换为- hai - - - -你是怎样的trim(

HERE is the demo

可能与-一样,如上面的答案所示,它也将删除尾随/领先{{1}}