PHP破折号后大写

问题描述:

$q = durham-region; 

$q = ucfirst($q); 

$q = Durham-region; 

如何在破折号后(达勒姆地区)使用大写字母?我是否必须将两者分开并充分利用?PHP破折号后大写

更新的解决方案

在PHP 5.5中,e修饰符preg_replace已被弃用。最好的办法是现在使用的是不使用此一建议,如:

$q = preg_replace_callback('/(\w+)/g', create_function('$m','return ucfirst($m[1]);'), $q) 

$q = implode('-', array_map('ucfirst', explode('-', $q))); 

原来的答案

你可以使用e使用preg_replace这种方式修改:

$test = "durham-region"; 
$test = preg_replace("/(\w+)/e","ucfirst('\\1')", $test); 
echo $test; 
// Durham-Region 
+0

太棒了,完美的作品! – mrlayance 2011-04-05 01:36:29

+0

我从来不知道e修饰符,真好!你可以像这样简化正则表达式:'$ test = preg_replace(“/(\ w *)/ e”,“ucfirst('\\ 1')”,$ test);' – 2011-04-05 01:44:14

+0

良好的调用更清晰的代码 - 是啊,电子修改器没有很多的用处,但它仍然在那里:) – Kelly 2011-04-05 01:46:47

是的。 ucfirst()只是大写字母的第一个字母。如果你想多个字母大写,你必须创建多个字符串。

$strings = explode("-", $string); 
$newString = ""; 
foreach($strings as $string){ 
    $newString += ucfirst($string); 
} 

function ucfirst_all($delimiter, $string){ 
    $strings = explode("-", $string); 
    $newString = ""; 
    foreach($strings as $string){ 
     $newString += ucfirst($string); 
    } 
    return $newString; 
} 
+0

你不是说'=' ? – 2011-04-05 02:30:27

你可以用这样的正则表达式回调方法做到这一点:

$q = preg_replace_callback('/\-([a-z]+)/g', create_function(
      '$m', 'return "-" . ucfirst($m[1]);' 
     ),$q) 

一个班轮不使用e PCRE修饰符进化得只剩:

$str = implode('-', array_map('ucfirst', explode('-', $str))); 
+0

这一行代码适用于我(也适用于包含Umlaute的单词)。 – 2014-11-18 12:02:43

重要的是要注意的是,这里提供的解决方案将不会与UTF-8字符串的工作是很重要的!

$str = "Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει-υπέρ νωθρού κυνός"; 
$str = explode('-', mb_convert_case($str, MB_CASE_TITLE)); 
$str = implode('-', array_map('mb_convert_case', $str, array(MB_CASE_TITLE, "UTF-8"))); 
echo $str; 

// str= Τάχιστη Αλώπηξ Βαφήσ Ψημένη Γη, Δρασκελίζει-Υπέρ Νωθρού Κυνόσ 

另一oneliner:

str_replace(' ','',ucwords(str_replace('-',' ',$action))) 
+0

只是谨慎,这可能会影响包含空格和短划线的字符串,但对于单个单词而言,这也很好。 – 2015-10-21 14:46:36

function UpperCaseAfterDash($wyraz) 
    { 
    $rozbij = explode('-',$wyraz); 
    echo $rozbij[0].'-'. 
    ucfirst($rozbij[1]); 
    } 

UpperCaseAfterDash("input-text"); 

以上函数返回输入文本

如果你需要一个破折号例如城市后仅大写字母名字(Jastrzębie-Zdrój)就足够了,但如果您需要多个...,只需计算多少个数组元素(在上面的代码中爆炸后),然后使用循环。

映入眼帘,

感谢的ucwordsdelimiter参数,因为PHP 5.4.32和5.5.16,它是如此简单:

$string = ucwords($string, "-");