我正在使用此函数将CamelCase转换为虚线字符串:
function camel2dashed($className) {
return strtolower(preg_replace('/([^A-Z-])([A-Z])/', '$1-$2', $className));
}
它有点起作用但是当我有前任时有问题。这个字符串:getADog
。它返回get-adog
,但我想要get-a-dog
我该如何更改我的代码?感谢
答案 0 :(得分:31)
function camel2dashed($className) {
return strtolower(preg_replace('/([a-zA-Z])(?=[A-Z])/', '$1-', $className));
}
查看在线工作:ideone
答案 1 :(得分:6)
如果您知道字符串不是以大写字母开头,则不需要前瞻断言来执行此操作,您可以在每个大写字母之前插入连字符,如下所示:
function camel2dashed($className) {
return strtolower(preg_replace('/([A-Z])/', '-$1', $className));
}
这仍然不会处理像@ sfjedi的“companyHQ” - >这样的情况。 “公司总部”。为此,您必须明确测试不应拆分的允许的大写子串,或指定一些通用规则(例如,不要在最后一个字符之前添加连字符。)
您可以在virtual duplicate question的答案中找到更复杂的替代方案。