我想要做這樣的事情:PHP所有的全大寫的單詞lowecase
$string = "Lorem ipsum DOLOR Sit amet";
...some magic here... -> $finalString
$finalString = "Lorem ipsum dolor Sit amet"
基本上我wan't轉換是完全以大寫小寫滿所有單詞。
我想要做這樣的事情:PHP所有的全大寫的單詞lowecase
$string = "Lorem ipsum DOLOR Sit amet";
...some magic here... -> $finalString
$finalString = "Lorem ipsum dolor Sit amet"
基本上我wan't轉換是完全以大寫小寫滿所有單詞。
一個無正則表達式的解決方案...
<?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
這個只對我有效,我只是建議修改:'strtoupper($ s)' - >' mb_strtoupper($ S, 'utf-8')'。與'strtolower'相同# – simPod
這是我最初建議:
$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
);
'e'修飾符被刪除,不是? – BlitZ
preg_replace_callback()可能是更好的方法 –
@ HAL9000非常感謝。我已經更新了我的答案。 – 2014-01-18 13:48:26
使用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/
謝謝。但是這個正則表達式仍然存在一些問題,因爲這個'Aá'變成了'aá',而不是像'Aá'一樣,和上面的答案一樣。 – simPod
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
代表單詞邊界。
謝謝。但是這個正則表達式仍然存在一些問題,因爲這個'Aá'變成了'aá',而不是像'Aá'一樣,和上面的答案一樣。 – simPod
你有沒有研究過這個?可以通過爆炸的空格,然後檢查每個元素或(我更喜歡)正則表達式來完成。自己嘗試一下,然後詳細說明你失敗的地方以及你爲什麼不能自己完成這件事 – kero