17

この関数を使用して、CamelCaseを破線の文字列に変換しています。

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

それはちょっと動作しますが、私が元のために持っているときは問題があります。この文字列:getADog。戻ってきますget-adogが欲しいget-a-dog

コードをどのように変更すればよいですか?ありがとう

4

2 に答える 2

37

先読みアサーションを使用します。

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

オンラインでの動作を確認してください: ideone

于 2012-05-08T23:08:43.433 に答える
8

文字列が大文字で始まっていないことがわかっている場合、これを行うために先読みアサーションは必要ありません。次のように、すべての大文字の前にハイフンを挿入できます。

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

これはまだ @sfjedi の "companyHQ" -> "company-hq" のようなケースを処理しません。そのためには、分割してはならない許可された大文字の部分文字列を明示的にテストするか、いくつかの一般的な規則を指定する必要があります (たとえば、最後の文字の前にハイフンを追加しないでください)。

この仮想重複質問への回答で、より洗練された代替手段を見つけることができます。

于 2012-05-08T23:28:49.937 に答える