有沒有人有這樣的PHP解決方案?正確Case'ing沒有打破像IBM,美國航空航天局等
的目標是有把這些
HELLO WORLD 的hello world 你好IBM
函數,分別返回這些
的Hello World 的Hello World 你好IBM
。
有沒有人有這樣的PHP解決方案?正確Case'ing沒有打破像IBM,美國航空航天局等
的目標是有把這些
HELLO WORLD 的hello world 你好IBM
函數,分別返回這些
的Hello World 的Hello World 你好IBM
。
蘇格蘭的麥克唐納先生喜歡他的名字大寫,而愛爾蘭的麥克唐納更喜歡這樣。如果事先不知道你指的是哪一位先生,那麼就很難知道哪一位是「正確的」,這比文件中的文字要更多的上下文。
此外,英國廣播公司(或者說是英國廣播公司?)已採取拼寫一些名稱,如美國國家航空航天局和北約。它刺向我;我非常不喜歡它。但這就是他們現在所做的。丙烯酸樹脂(或者一些人喜歡稱之爲「初始主義」)什麼時候成爲一個詞呢?
我聽到你的聲音,但嘿,你沒有什麼,我可以做到這一點。但是當我們面臨將數據從一個地方移動到另一個地方的挑戰,並且您的目標是儘可能多地清理數據時,您可能會認爲如果一個單詞最初是用一些大寫字母書寫的,可能有很好的理由,所以我們不去碰它,我們只是略過它。在這種情況下,美國宇航局,麥當勞和麥克唐納都會按照原樣把它變成另一端。問題是這是什麼正則表達式? –
這是一個黑客,你可以存儲一個首字母縮略詞列表,你想保持大寫,然後比較字符串中的單詞與$exceptions
列表。 雖然喬納森是正確的,如果它的名字你的工作而不縮寫,那麼這種解決方案是沒用的。但顯然如果來自蘇格蘭的麥克唐納先生處於正確的情況下,那麼它不會改變。
<?php
$exceptions = array("to", "a", "the", "of", "by", "and","on","those","with",
"NASA","FBI","BBC","IBM","TV");
$string = "While McBeth and Mr MacDonald from Scotland
was using her IBM computer to watch a ripped tv show from the BBC,
she was being watched by the FBI, Those little rascals were
using a NASA satellite to spy on her.";
echo titleCase($string, $exceptions);
/*
While McBeth and Mr MacDonald from Scotland
was using her IBM computer to watch a ripped TV show from the BBC,
she was being watched by the FBI, Those little rascals were
using a NASA satellite to spy on her.
*/
/*Your case example
Hello World Hello World Hello IBM, BBC and NASA.
*/
echo titleCase('HELLO WORLD hello world Hello IBM, BBC and NASA.', $exceptions,true);
function titleCase($string, $exceptions = array(), $ucfirst=false) {
$words = explode(' ', $string);
$newwords = array();
$i=0;
foreach ($words as $word){
// trim white space or newlines from string
$word=trim($word);
// trim ending coomer if any
if (in_array(strtoupper(trim($word,',.')), $exceptions)){
// check exceptions list for any words that should be in upper case
$word = strtoupper($word);
} else{
// convert to uppercase if $ucfirst = true
if($ucfirst==true){
// check exceptions list for should not be upper case
if(!in_array(trim($word,','), $exceptions)){
$word = strtolower($word);
$word = ucfirst($word);
}
}
}
// upper case the first word in the string
if($i==0){$word = ucfirst($word);}
array_push($newwords, $word);
$i++;
}
$string = join(' ', $newwords);
return $string;
}
?>
謝謝勞倫斯的功能,但是,我沒有這樣的列表。這是一個熱門名單,它是動態的。如果一次處理一個單詞並跳過這些單詞,如果單詞包含從第二個字符開始的大寫字母並且開頭。這是什麼正則表達式?這種方法會將所有的單詞轉換爲標題大小寫(無需修改諸如IBM,McDonald,WordPress等單詞)。 –
對於任何比較,您都需要某種參考。 –
沒有銀彈,那裏有永遠在這種情況下的例外 - 還等什麼,你首先做什麼? – 2012-05-28 00:27:23
另請參見:[編程中人名的大寫](http://stackoverflow.com/questions/2466706/capitalization-of-person-names-in-programming/)。 –