我正在研究类名,我需要检查是否有任何大驼峰命名并以这种方式打破它:
"UserManagement" becomes "user-management"
或
"SiteContentManagement" becomes "site-content-management"
经过大量搜索后,我只发现了 ucfirst、strtolower、strtoupper、ucword 的各种用法,但我看不出如何使用它们来满足我的需要,有什么想法吗?
感谢阅读;)
最佳答案
您可以使用 preg_replace
用您的 lower-dash-lower 变体替换小写字母后跟大写字母的任何实例:
$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
关于PHP:如何转换包含大写字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6564903/