骆驼大小写破折号 - 两个彼此相邻的首都

2022-08-30 21:46:24

我正在使用这个函数将CamelCase转换为虚线字符串:

function camel2dashed($className) {
    return strtolower(preg_replace('/([^A-Z-])([A-Z])/', '$1-$2', $className));
}

它有点工作,但当我有例如这个字符串时有问题:.它回来了,但我想要getADogget-adogget-a-dog

我应该如何更改我的代码?谢谢


答案 1

使用前瞻断言

function camel2dashed($className) {
    return strtolower(preg_replace('/([a-zA-Z])(?=[A-Z])/', '$1-', $className));
}

看到它在线工作:ideone


答案 2

如果您知道字符串不以大写字母开头,则不需要前瞻断言即可执行此操作,只需在每个大写字母之前插入连字符,如下所示:

function camel2dashed($className) {
    return strtolower(preg_replace('/([A-Z])/', '-$1', $className));
}

这仍然无法处理像@sfjedi的“companyHQ”->“company-hq”这样的情况。为此,您必须显式测试不允许拆分的大写子字符串,或者指定一些通用规则(例如,不要在最后一个字符之前加上连字符)。

您可以在此虚拟重复问题的答案中找到一些更复杂的替代方案。


推荐