我需要将给定的字符串值(带或不带分隔符)转换为CamelCase
字符串。到目前为止,这就是我在做的事情:
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 = 'string_with_separator';
$test2 = 'string';
我希望他们成为:
$test1 = 'StringWithSeparator';
$test2 = 'String';
如何?我做错了什么以及如何解决?我使用的是PHP 5.5.x!
注意:如果您知道任何具有此类功能的字符串操作类包,请告诉我,这样我就不会重新发明轮子了!
答案 0 :(得分:3)
使用
watchTransition
请参阅PHP demo
由于您需要考虑可选元素,因此您需要为这两种方案使用适当的模式。如果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]);
}
}
未通过,$re = $character == null ? '/^([a-zA-Z])/' : '/(?:^|' . $character . ')([a-zA-Z])/';
将指定第一个/^([a-zA-Z])/
正则表达式。第二个将匹配$char
和字符串的开头。两者都应该让捕获组能够更改大小写并在$char
内返回正确的字符串。
至于在班级中使用回调本身,您需要检查preg_replace_callback requires argument 2 to be a valid callback… Stuck!。必须在removeCharacterAndCapitalize
中将其定义为array('UtilString', 'removeCharacterAndCapitalize')
。
答案 1 :(得分:1)
PHP有一个名为ucwords()
的函数,它将每个单词的第一个字符加上大写。分隔符需要第二个参数。
请注意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