2014-01-18 11 views
2

我想要做這樣的事情:PHP所有的全大寫的單詞lowecase

$string = "Lorem ipsum DOLOR Sit amet"; 
...some magic here... -> $finalString 
$finalString = "Lorem ipsum dolor Sit amet" 

基本上我wan't轉換是完全以大寫小寫滿所有單詞。

+0

你有沒有研究過這個?可以通過爆炸的空格,然後檢查每個元素或(我更喜歡)正則表達式來完成。自己嘗試一下,然後詳細說明你失敗的地方以及你爲什麼不能自己完成這件事 – kero

回答

1

一個無正則表達式的解決方案...

<?php 
$string = "Lorem ipsum DOLOR Sit amet"; 
$str_arr = explode(' ',$string); 
foreach($str_arr as &$val) 
{ 
if($val==strtoupper($val)) 
{ 
$val=strtolower($val); 
} 
} 
echo $str= implode(' ',$str_arr); //"prints" Lorem ipsum dolor Sit amet 
+0

這個只對我有效,我只是建議修改:'strtoupper($ s)' - >' mb_strtoupper($ S, 'utf-8')'。與'strtolower'相同# – simPod

6

這是我最初建議:

$finalString = preg_replace("/\\b[A-Z]+\\b/e", "strtolower(\"\\0\");", $string); 

但是,因爲PHP 5.5.0起,e修飾符preg_replace已成爲過時。所以,正確的選擇將是preg_replace_callback

$string = "Lorem ipsum DOLOR Sit amet"; 
$finalString = preg_replace_callback(
    "/\\b[A-Z]+\\b/", 
    function($matches){ 
    return strtolower($matches[0]); 
    }, 
    $string 
); 
+2

'e'修飾符被刪除,不是? – BlitZ

+2

preg_replace_callback()可能是更好的方法 –

+0

@ HAL9000非常感謝。我已經更新了我的答案。 – 2014-01-18 13:48:26

1

使用preg_replace_callback()與表達/\b[A-Z]+\b/\b - 啓動或單詞的末尾,[A-Z]+ - 所有本地字符都是大寫的,並至少有一個字符):

<?php 
header('Content-Type: text/plain; charset=utf-8'); 

$string = 'Lorem ipsum DOLOR Sit amet'; 

$result = preg_replace_callback(
    '/\b[A-Z]+\b/', 
    function($matches){ 
     return strtolower($matches[0]); 
    }, 
    $string 
); 

echo $result; 
?> 

顯示:

Lorem ipsum dolor Sit amet 

P.S:您也可以更新的正則表達式爲小寫隻字,其中至少2個字符由:

/\b[A-Z]{2,}\b/ 
+0

謝謝。但是這個正則表達式仍然存在一些問題,因爲這個'Aá'變成了'aá',而不是像'Aá'一樣,和上面的答案一樣。 – simPod

2

preg_replace_callback是你所需要的。

$string = "Lorem ipsum DOLOR Sit amet"; 

$finalString = preg_replace_callback('/\b([A-Z]+)\b/', function($m) { 
     return strtolower($m[1]); 
}, $string); 

echo $finalString; 

$m[1]相匹配大寫字的第一個捕獲組([A-Z]+)匹配。 \b代表單詞邊界。

+0

謝謝。但是這個正則表達式仍然存在一些問題,因爲這個'Aá'變成了'aá',而不是像'Aá'一樣,和上面的答案一樣。 – simPod

相關問題