只接受字母和数字.替换为单个'-'PHP


accept only alphabets and numbers. Replace others by single '-'. PHP

在我的代码中,我有一个函数用于删除所有带有'-'的non-alphabeticnon-numeric字符。但问题是我的regex只是删除了特殊字符,无论它是'-'。如果输入是

((hai..)how   are you?)

将更改为

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

我需要将所有相邻的'-'合并为一个。并删除开始和结束的特殊字符。即以上结果变为

 hai-how-are-you

my function is

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

和我得到一个正则表达式代码组合'-'。

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

但是我不知道如何把这两者结合起来。请帮助. .提前谢谢大家

试试这个:

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

我想这就是你想要的,

<?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

使用标志g:

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

它将匹配多个非字母数字字符并将它们替换为一个-。例如

(( hai ..) how are you ?)将被- hai - how - are - you -

这是演示

可能是trim(,就像上面的答案一样,它也会删除末尾/前导的-