2011-04-05 99 views
9
$q = durham-region; 

$q = ucfirst($q); 

$q = Durham-region; 

如何在破折號後(達勒姆地區)使用大寫字母?我是否必須將兩者分開並充分利用?PHP破折號後大寫

回答

15

更新的解決方案

在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

0

是的。 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

0

你可以用這樣的正則表達式回調方法做到這一點:

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

一個班輪不使用e PCRE修飾符進化得只剩:

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

這一行代碼適用於我(也適用於包含Umlaute的單詞)。 – 2014-11-18 12:02:43

0

重要的是要注意的是,這裏提供的解決方案將不會與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= Τάχιστη Αλώπηξ Βαφήσ Ψημένη Γη, Δρασκελίζει-Υπέρ Νωθρού Κυνόσ 
1

另一oneliner:

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

只是謹慎,這可能會影響包含空格和短劃線的字符串,但對於單個單詞而言,這也很好。 – 2015-10-21 14:46:36

0

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

UpperCaseAfterDash("input-text"); 

以上函數返回輸入文本

如果你需要一個破折號例如城市後僅大寫字母名字(Jastrzębie-Zdrój)就足夠了,但如果您需要多個...,只需計算多少個數組元素(在上面的代碼中爆炸後),然後使用循環。

映入眼簾,

5

感謝的ucwordsdelimiter參數,因爲PHP 5.4.32和5.5.16,它是如此簡單:

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