PHP:如何转换包含大写字符的字符串

时间:2011-07-03 18:57:30

标签: php string

我正在研究班级名称,我需要检查是否有任何上层驼峰案例名称并以这种方式打破:

 "UserManagement" becomes "user-management"  

 "SiteContentManagement" becomes "site-content-management"
经过广泛搜索后我才发现ucfirst,strtolower,strtoupper,ucword的各种用途,我看不出如何使用它们来满足我的需求任何想法?

感谢阅读;)

5 个答案:

答案 0 :(得分:5)

您可以使用preg_replace替换小写字母的任何实例,然后使用较低的破折号 - 较低的变体替换大写字母:

$dashedName = preg_replace('/([^A-Z-])([A-Z])/', '$1-$2', $className);

然后是strtolower()来处理任何剩余的大写字母:

return strtolower($dashedName);

这里的全部功能:

function camel2dashed($className) {
  return strtolower(preg_replace('/([^A-Z-])([A-Z])/', '$1-$2', $className));
}

解释使用的正则表达式:

/        Opening delimiter
(        Start Capture Group 1
  [^A-Z-]   Character Class: Any character NOT an uppercase letter and not a dash
)        End Capture Group 1
(        Start Capture Group 2
  [A-Z]    Character Class: Any uppercase letter
)        End Capture Group 2
/        Closing delimiter

替换字符串

$1  Insert Capture Group 1
-   Literal: dash
$2  Insert Capture Group 2

答案 1 :(得分:3)

Theres没有内置的方法。

这会ConvertThis进入convert-this

$str = preg_replace('/([a-z])([A-Z])/', '$1-$2', $str);
$str = strtolower($str);

答案 2 :(得分:2)

您可以使用正则表达式获取每个单词,然后添加如下所示的短划线:

preg_match_all ('/[A-Z][a-z]+/', $className, $matches); // get each camelCase words
$newName = strtolower(implode('-', $matches[0])); // add the dashes and lowercase the result

答案 3 :(得分:0)

这完全不需要任何捕获组,只需找到大写字母(不包括字符串的第一个字母)之前的零宽度位置,然后将其替换为连字符,然后在新字符串上调用strtolower。

代码:(Demo

isset

先行$o = []; @$var = ["",0,null,1,2,3,$foo,$o['myIndex']]; array_walk($var, function($v) { echo (!isset($v) || $v == false) ? 'true ' : 'false'; echo ' ' . (empty($v) ? 'true' : 'false'); echo "\n"; }); 进行匹配,但不消耗任何字符。

答案 4 :(得分:-1)

最好的方法可能是preg_replace使用一个模式,用大写字母替换大写字母,在它们之前添加“ - ”。

你也可以浏览每个字母并重建整个字符串。