【问题标题】:camelCase to dash - two capitals next to each othercamelCase to dash - 两个大写字母并排
【发布时间】:2012-05-17 11:28:52
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您是否考虑过是否需要两个大写字母并排?例如,companyHQ 代表公司总部?你不会想要 company-h-q,对吧?
  • 在这种情况下你是对的,但它不会发生。谢谢
  • 这不是骆驼案。顺便说一句,这是 PascalCase。

标签: php regex camelcasing


【解决方案1】:

使用lookahead assertion

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”之类的情况。为此,您必须明确测试不应该拆分的允许大写子字符串,或指定一些通用规则(例如,不要在最后一个字符之前添加连字符)。

    您可以在virtual duplicate question 的答案中找到一些更复杂的替代方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多