使用自定义分隔符在PHP中大写单词

时间:2010-03-13 05:20:12

标签: php string methods capitalization

我需要一种方法来大写单词的每个首字母。 这是我到目前为止所得到的,它几乎适用于所有字符串...但它在这个“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我会在醒来时看到我最喜欢哪种解决方案,然后告诉你我选择了哪一种。

修改

似乎所有的功能都在回归“health&amp; Amp; Renomme”或“health&amp; Renomme”。我的php.ini中的某些内容可能搞砸了吗?

3 个答案:

答案 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); 
?>