2

我需要一种将单词的每个首字母大写的方法。这是我到目前为止得到的,它几乎适用于每个字符串......但它在这个“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() 使用“”作为分隔符,例如我也想使用“-”。

编辑

感谢大家的解决方案。我现在要睡觉了,这里是早上 7 点。:D 当我醒来时,我会看看我最喜欢哪种解决方案,然后告诉你我选择了哪一种。

编辑

似乎所有功能都返回“wellness &Amp; Renomme”或“wellness & Renomme”。有没有可能我的 php.ini 中的某些东西搞砸了?

4

3 回答 3

1

我对你到底想做什么感到困惑。PHP 已经有一个ucwords()可以做到这一点的函数,我看不出你所做的有什么不同......如果你将每个单词的第一个字母大写,分隔符有什么不同吗?两个词之间有一个“&”有关系吗?

编辑:我想我现在明白了。我认为您遇到的唯一问题是您无法判断它是否将文本大写,因为它已经全部大写,您需要做的就是先将其小写。我也改变了它以完全摆脱“下一个角色”的东西,这是不必要的。如果找到匹配项,只需将下一个字符更改为大写即可。尝试这个:

// 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", " -&");
于 2010-03-13T05:25:50.730 回答
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'));
于 2010-03-13T06:06:20.773 回答
0

要转换所有句子中的首字母大写,请使用以下代码。

前任)

$string = strtolower($string);
echo preg_replace('/(^|[\.!?]"?\s+)([a-z])/e', '"$1" . ucfirst("$2")', $string); 
?>
于 2014-01-02T10:12:36.893 回答