2012-05-08 8 views
8

の隣に私が点線の文字列にキャメルケースを変換するには、この機能を使用しています:キャメルケース - 2つの首都互いに

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

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

私のコードを変更するにはどうすればよいですか?おかげ

+2

2つの大文字が隣り合っていると思ったことはありますか?たとえば、本社のcompanyHQ?あなたは会社-h-qを望んでいないだろうか? – jedmao

+0

この場合、あなたは正しいですが、それは起こりません。ありがとう – simPod

+0

これはキャメルケースではありません。これはPascalCase btwです。 –

答えて

26

使用して、lookahead assertion

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

オンラインで作業、それを参照してください:あなたはあなたの文字列が、上で起動しないことがわかっている場合は、これを行うには先読みアサーションを必要としないideone

6

これはまだ@sfjediのようなケースを処理しません

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

:-case手紙は、あなただけのこのようなすべての大文字の前にハイフンを挿入することができます"companyHQ" - > "company-hq"のようになります。そのためには、分割してはならない大文字の部分文字列を明示的にテストするか、いくつかの一般的なルールを指定する必要があります(たとえば、最後の文字の前にハイフンを追加しないなど)。

このような回答の中には、より洗練された選択肢があります。virtual duplicate question

関連する問題