2016-10-31 21 views
3

特定の文字列値(セパレータありまたはなし)をCamelCase文字列に変換する必要があります。今のところ、これは私が何をやっているされています文字列区切り文字がnullの場合でも文字列値をキャメルにする方法は?

class UtilString 
{ 
    public function stringToCamelCase($string, $character = null) 
    { 
     return preg_replace_callback("/{$character}[a-zA-Z]/", 'removeCharacterAndCapitalize', $string); 
    } 

    private function removeCharacterAndCapitalize($matches) 
    { 
     return strtoupper($matches[0][1]); 
    } 
} 

$str1 = 'string_with_separator'; 
$str2 = 'string'; 

$test1 = (new UtilString())->stringToCamelCase($str1, '_'); 
$test2 = (new UtilString())->stringToCamelCase($str2); 

は出力上記のコードを持っている:

$test1 = 'StringWithSeparator'; 
$test2 = 'String'; 

方法:

$test1 = 'string_with_separator'; 
$test2 = 'string'; 

私は彼らがなりたいですか?私が間違ってやっていることとそれを修正する方法は?私はPHP 5.5.xを使用しています!

注:このタイプの機能を備えた文字列操作クラス|パッケージがわかっている場合はお知らせください。私はホイールを再発明していません!

+0

'どうなってしまうのstringwithoutseparator'のでしょうか? – chris85

+0

@ chris85 '$ str2'と同じパスに入力し、出力は' Stringwithoutseparator'でなければなりません – ReynierPM

+0

ほとんどの場合、最初の文字以外は動作しますが、コールバックは '$これ、 'removeCharacterAndCapitalize'] ' –

答えて

3

使用

class UtilString 
{ 
    public function stringToCamelCase($string, $character = null) 
    { 
     $re = $character == null ? '/^([a-zA-Z])/' : '/(?:^|' . $character . ')([a-zA-Z])/'; 
     return preg_replace_callback($re, array('UtilString', 'removeCharacterAndCapitalize'), $string); 
    } 

    private function removeCharacterAndCapitalize($matches) 
    { 
     return strtoupper($matches[1]); 
    } 
} 

は、オプションの要素を考慮する必要がありますので、あなたは両方のシナリオに適切なパターンを使用する必要がPHP demo

を参照してください。 $charが渡されない場合、$re = $character == null ? '/^([a-zA-Z])/' : '/(?:^|' . $character . ')([a-zA-Z])/';は最初の/^([a-zA-Z])/正規表現を指定します。 2番目は$charと文字列の先頭に一致します。どちらもキャプチャグループを持って、ケースを変更して適切な文字列をremoveCharacterAndCapitalizeの中に返すことができます。

あなたのクラスでコールバック自体を使用する場合は、preg_replace_callback requires argument 2 to be a valid callback… Stuck!をチェックする必要があります。 preg_replace_callbackにはarray('UtilString', 'removeCharacterAndCapitalize')と定義する必要があります。

1

PHPには、すべての単語の最初の文字を大文字にするucwords()という関数があります。デリミタには2番目のパラメータが必要です。

ucwords()ではありません。はデリミタを削除します。したがって、あなた自身でこれを行う必要があります。 str_replaceとなります。ここでは簡単な例です:

function stringToCamelCase($string) { 

    $delimiters = array('_'); 

    $string = ucwords($string, implode('', $delimiters)); 
    $string = str_replace($delimiters, '', $string); 

    return $string; 
} 

$my_string = 'string_with_separator'; 
echo stringToCamelCase($my_string); 

は出力:

StringWithSeparator 
関連する問題