preg_replace - 留下不需要的字符

Evi*_*kie 0 php preg-replace

我有一个字符串:

$string = "Hello World!";
Run Code Online (Sandbox Code Playgroud)

我想把它变成一个URL友好的标签,我已经开发了一个函数来做到这一点:

function stripJunk($string){
    $string = str_replace(" ", "-", $string);
    $string = preg_replace("/[^a-zA-Z]\s/", "", $string);
    $string = strtolower($string);
    return $string;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我在$string上面运行时,我得到以下内容:

$string = "hello-world!";
Run Code Online (Sandbox Code Playgroud)

似乎有些人物在我的preg_replace中滑落,即使从我的理解,他们也不应该.

它应该是这样的:

$string = "hello-world";
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?(这应该是轻松的柠檬吱吱!)

编辑1:我不知道正则表达式是初学者的东西,但无论如何.此外,删除我的字符串中的\ s不会产生所需的结果.

期望的结果是:

  1. 所有空格都转换为破折号.
  2. 将删除所有不是AZ或0-9的剩余字符.
  3. 然后将该字符串转换为小写.

编辑2+:稍微清理我的代码.

Sil*_*ost 5

以下工作对我来说很好:

function stripJunk($string){
    $string = str_replace(" ", "-", trim($string));
    $string = preg_replace("/[^a-zA-Z0-9-]/", "", $string);
    $string = strtolower($string);
    return $string;
}
Run Code Online (Sandbox Code Playgroud)