将 str 的第一个字符大写,但忽略一两个字母的单词


Turn first character of str capitalized but ignore one or two letter words

我是新手,这对我来说很难。

我在变量中有一个文本:

$bio = 'text, text, tex ...';

我可以使用 ucfirst php 函数使文本中的单词以大写字母开头。

问题是我不希望带有一个、两个或三个字母的单词大写,因为它看起来不专业。

重要提示:但我也想保持字母"I"大写,因为它是正确的英语语法。

所以像这样的文本:这是一个没有UCSfirst函数的文本,我认为它需要一些大写

看起来像:这是一个没有 ucfirst 函数的文本,我认为它需要一些大写

有什么想法吗?

这将大写任何长度为 4 个或更多字母的单词(英文字母序列):

$bio = preg_replace_callback('/[a-z]{4,}|'bi'b/i', function($match){
    return ucfirst($match[0]);
}, $bio);

对于 5.3 之前的 PHP 版本:

$bio = preg_replace_callback('/[a-z]{4,}|'bi'b/i',
  create_function('$match', 'return ucfirst($match[0]);'), $bio);

它将保留任何较短的单词,例如 Iadd ,并将i大写。

我会使用正则表达式。如果你不想,你可以使用 split,然后迭代令牌并使用一堆 if-else,但正则表达式更酷。;)

这里有一个非常相似的问题:正则表达式将每个单词的第一个字母大写,也在破折号等特殊字符之后

嗯?

$bio_x = explode(" ",$bio); if(strlen($bio_x[0]) > 3) $bio = ucfirst($bio); $bio = str_replace(" i "," I ",$bio);