即使字符串分隔符为空,如何对字符串值进行 CamelCase?
How to CamelCase an string value even if string separator is null?
我需要将给定的字符串值(带或不带分隔符)转换为 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!
注意:如果您知道任何字符串操作class|具有此类功能的程序包,请告诉我,这样我就不会重新发明轮子了!
使用
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
和字符串的开头。两者都应该有捕获组能够改变大小写和 return removeCharacterAndCapitalize
.
中的正确字符串
关于在 class 中使用回调本身,您需要检查 preg_replace_callback requires argument 2 to be a valid callback… Stuck!。它必须在 preg_replace_callback
.
中定义为 array('UtilString', 'removeCharacterAndCapitalize')
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
我需要将给定的字符串值(带或不带分隔符)转换为 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!
注意:如果您知道任何字符串操作class|具有此类功能的程序包,请告诉我,这样我就不会重新发明轮子了!
使用
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
和字符串的开头。两者都应该有捕获组能够改变大小写和 return removeCharacterAndCapitalize
.
关于在 class 中使用回调本身,您需要检查 preg_replace_callback requires argument 2 to be a valid callback… Stuck!。它必须在 preg_replace_callback
.
array('UtilString', 'removeCharacterAndCapitalize')
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