camelCase to dash - 彼此相邻的两个首都

时间:2012-05-08 23:07:08

标签: php regex camelcasing

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

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

它有点起作用但是当我有前任时有问题。这个字符串:getADog。它返回get-adog,但我想要get-a-dog

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

2 个答案:

答案 0 :(得分:31)

使用lookahead assertion

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的答案中找到更复杂的替代方案。