字符串替换以替换空格并保持破折号

String replace to replace spaces and maintain dash

我正在尝试转换:

" Long Grain IRRI-6 White Rice "

" long_grain_irri_6_white_rice "

但它返回这个

" long_grain_irri-6_white_rice "

代码如下:

public function phpslug($string){
    $slug = preg_replace('/[^a-z0-9-]+/', '_', strtolower($string));
    return $slug;
}

我不仅要删除字母之间的space,我还需要删除“-”这个,所以它可以用“_”代替。

如何解决这个问题?

您可以从正则表达式模式中删除 -

function phpslug($string)
{
    $slug = preg_replace('/[^a-z0-9]+/', '_', strtolower(trim($string)));
    return $slug;
}

var_dump(phpslug("  Long Grain IRRI-6 White Rice  "));

或者您可以简化您的 RegEx 模式:

function phpslug($string)
{
    $slug = preg_replace('/[-\s]+/', '_', strtolower(trim($string)));
    return $slug;
}

var_dump(phpslug("  Long Grain IRRI-6 White Rice  "));

输出:

 string(28) "long_grain_irri_6_white_rice"