我在php中遇到字符串操作问题。我正在编写一个函数,它带有一个字符串参数,其中的单词用“”或“_”分隔。我希望该函数删除所有非字母字符并返回用“ - ”分隔的单词。 这就是我到目前为止所做的:
function cleanCategoryForUrl($strCategory){
$newCategory = str_replace('_', '-', $strCategory); //First replacement
echo ($newCategory);
$newCategory = str_replace(' ', '-', $newCategory); //Second replacement
echo ($newCategory);
$newCategory = preg_replace('/[^a-z-]/i', '', $strCategory); //Final replacement
echo ($newCategory);
return $newCategory;
}
第一次和第二次替换将使用“ - ”而不是“”或“_”分隔单词。最后的替换将使所有不是字母或“ - ”的字符变为红色。
但是当我测试代码时,我在最终替换后会得到意想不到的结果。
输入“Home_Health”后,我打印出来了:
Home-Health
Home-Health
HomeHealth
前两个输出符合预期,但第三个输出删除了“ - ”(不应该发生)。我怀疑我的正则表达式模式有问题,但是当我在http://gskinner.com/RegExr/上测试它时,这句话很好。我是新手使用正则表达式,无法弄清楚是什么问题。请帮忙
答案 0 :(得分:2)
一切似乎都很好但只是你在preg_replace中传递的参数中的一个问题。 而不是传递$ newCategory,而是传递$ strCategory。
试试下面的一个,
function cleanCategoryForUrl($strCategory){
$newCategory = str_replace('_', '-', $strCategory); //First replacement
echo ($newCategory."<br/>");
$newCategory = str_replace(' ', '-', $newCategory); //Second replacement
echo ($newCategory."<br/>");
$newCategory = preg_replace('/[^a-z-]/i', '', $newCategory); //Final replacement
echo ($newCategory."<br/>");
return $newCategory;
}
否则你可以使用这个。
function cleanCategoryForUrl($strCategory){
$newCategory = preg_replace('/[_ ]/', '-', $strCategory); //Final replacement
$newCategory = preg_replace('/[^a-z-]/i', '', $newCategory); //Final replacement
echo ($newCategory."<br/>");
return $newCategory;
}
希望这会有所帮助,
谢谢!
侯赛因。