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

bla*_*sei 3 php string

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

 "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,我看不出如何使用它们来满足我的需求任何想法?

谢谢阅读 ;)

And*_*ore 5

您可以使用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)