我正在研究类名,我需要检查是否有任何上层驼峰案例名称并以这种方式打破它:
"UserManagement" becomes "user-management"
Run Code Online (Sandbox Code Playgroud)
要么
"SiteContentManagement" becomes "site-content-management"
Run Code Online (Sandbox Code Playgroud)
经过广泛搜索后,我才发现各种使用ucfirst,strtolower,strtoupper,ucword,我看不出如何使用它们来满足我的需求任何想法?
谢谢阅读 ;)
您可以使用preg_replace替换小写字母的任何实例,然后使用较低的破折号 - 较低的变量替换大写:
$dashedName = preg_replace('/([^A-Z-])([A-Z])/', '$1-$2', $className);
Run Code Online (Sandbox Code Playgroud)
然后是a strtolower()来处理任何剩余的大写字母:
return strtolower($dashedName);
Run Code Online (Sandbox Code Playgroud)
这里的全部功能:
function camel2dashed($className) {
return strtolower(preg_replace('/([^A-Z-])([A-Z])/', '$1-$2', $className));
}
Run Code Online (Sandbox Code Playgroud)
解释使用的正则表达式:
/ 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
Run Code Online (Sandbox Code Playgroud)
至于替换字符串
$1 Insert Capture Group 1
- Literal: dash
$2 Insert Capture Group 2
Run Code Online (Sandbox Code Playgroud)