我正在研究班级名称,我需要检查是否有任何上层驼峰案例名称并以这种方式打破:
"UserManagement" becomes "user-management"
或
"SiteContentManagement" becomes "site-content-management"
经过广泛搜索后我才发现ucfirst,strtolower,strtoupper,ucword的各种用途,我看不出如何使用它们来满足我的需求任何想法?
感谢阅读;)
答案 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使用一个模式,用大写字母替换大写字母,在它们之前添加“ - ”。
你也可以浏览每个字母并重建整个字符串。