我需要一种方法来大写单词的每个首字母。 这是我到目前为止所得到的,它几乎适用于所有字符串...但它在这个“WELLNESS& RENOMME”中失败了。
// method in stringModify Class
function capitalizeWords($words, $charList) {
$capitalizeNext = true;
for ($i = 0, $max = strlen($words); $i < $max; $i++) {
if (strpos($charList, $words[$i]) !== false) {
$`capitalizeNext` = true;
} else if ($capitalizeNext) {
$capitalizeNext = false;
$words[$i] = strtoupper($words[$i]);
}
}
return $words;
}
// Calling method
$stringModify->capitalizeWords("WELLNESS & RENOMME", " -&");
我希望有人可以帮助我...我现在尝试了1.5个小时并且没有任何线索。提前感谢任何提示或提示。
ucwords()使用“”作为分隔符,我也想使用“ - ”。
答案 0 :(得分:1)
我对你究竟要做什么感到困惑。 PHP已经有一个ucwords()
函数可以做到这一点,我看不出你在做什么有什么不同......如果你把每个单词的第一个字母大写,那么分隔符有什么不同吗?是否有一个'&amp;'是否重要?这两个词之间?
编辑:我想我现在明白了。我假设你遇到的唯一问题就是你不能说它是大写文本,因为它已经全部是大写的,所有你需要做的就是首先小写它。我也改变它以完全摆脱“下一个角色”的事情,这是不必要的。如果找到匹配项,只需将下一个字符更改为大写。试试这个:
// method in stringModify Class
function capitalizeWords($words, $charList) {
$words = strtolower($words); // lowercase everything that isn't capitalized
for ($i = 0; $i < strlen($words); $i++) {
if (strpos($charList, $words[$i]) !== false) $words[$i+1] = strtoupper($words[$i+1]);
}
return $words;
}
// Calling method
$stringModify->capitalizeWords("WELLNESS & RENOMME", " -&");
答案 1 :(得分:1)
function cb($word){ return ucwords(strtolower($word[0])); }
var_dump(preg_replace_callback('@[A-z]+@i','cb','TESTING-TESTING / TESTING & TEST / testing*&^123!&%&*TEST'));
答案 2 :(得分:0)
要转换所有句子中的首字母大写,请使用以下代码。
例)
$string = strtolower($string);
echo preg_replace('/(^|[\.!?]"?\s+)([a-z])/e', '"$1" . ucfirst("$2")', $string);
?>