在php中,如何使用符号后的第一个大写字符?
我有一个示例代码:在php中,如何使用符号后的第一个大写字符?,php,Php,我有一个示例代码: $foo = 'hello world'; $foo = ucwords($foo); // Hello World 但我还有一个示例代码: $foo = 'hello-world'; $foo = ucwords($foo); 结果如何是Hello World使用preg\u replace\u回调 $foo = 'hello-world'; $foo = ucwordsEx($foo); echo $foo; // Hello-World 使用的功能 functi
$foo = 'hello world';
$foo = ucwords($foo); // Hello World
但我还有一个示例代码:
$foo = 'hello-world';
$foo = ucwords($foo);
结果如何是
Hello World
使用preg\u replace\u回调
$foo = 'hello-world';
$foo = ucwordsEx($foo);
echo $foo; // Hello-World
使用的功能
function ucwordsEx($str) {
return preg_replace_callback ( '/[a-z]+/i', function ($match) {
return ucfirst ( $match [0] );
}, $str );
}
很久以前我不得不解决这个问题。这将保留字符串中的连字符、空格和其他字符,并在任何单词边界上大写
// Convert a string to mixed-case on word boundaries.
function my_ucfirst($string) {
$temp = preg_split('/(\W)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach ($temp as $key => $word) {
$temp[$key] = ucfirst($word);
}
return join ('', $temp);
}
按
-
拆分,该数组的每个部分都大写,然后按-
联接(除非破折号和空格出现在同一字符串中并且应该保留)。OP要求在字符-
之后大写,而不是在非字母之后。对于这样一个基本的情况,我不太清楚我对正则表达式的开销有何感受。@L105问题的标题是“symbol-”,然后在示例中使用symbol-
。在发表负面评论之前,先看看别人对糟糕英语的看法和理解。研究如何产生结果是Hello World
。。标题可能会产生误导,为什么不在\w
之后的第一个\w
的基础上使用preg\u replace()
和ucfirst()
,以减少拆分的开销,然后加入?@BLaZuRE,这应该是可行的。在原文中,我还将所有其他字母转换为小写,尽管在这个问题中没有要求这样做。我八年前也写过这段代码……如果我只做一个转换,比如ucfirst()
,我可能会做一个preg\u replace\u回调
(在单词边界上拆分,而不是在字母串上拆分)。这里唯一真正的优势是,有几个点需要添加额外的转换(就像我在本例中剥离的那些转换)。有很多方法可以做到这一点,而“正确”的方法将由原始问题中没有给出的问题决定。@BLaZuRE-Hm。我想也许不再需要这个标志了。我将不得不回顾所有的古代版本,并试图找出它为什么会出现在那里。。。