PHP将所有字母大写(包括斜杠后)除了某些单词

时间:2012-12-31 16:07:39

标签: php string capitalization

我想使用PHP通过大写每个单词来清理一些标题,包括斜杠后的单词。但是,我不想把'和','of'和'the'这两个词大写。

以下是两个示例字符串:

  

会计技术/技术员和簿记

     

脊柱骨科手术

应改为:

  

会计技术/技术员和簿记

     

脊椎骨科手术


这是我现在拥有的。我不确定如何将内爆与preg_replace_callback结合起来。

// Will capitalize all words, including those following a slash
$major = implode('/', array_map('ucwords',explode('/',$major)));

// Is supposed to selectively capitalize words in the string
$major = preg_replace_callback("/[a-zA-Z]+/",'ucfirst_some',$major);

function ucfirst_some($match) {
   $exclude = array('and','of','the');
   if ( in_array(strtolower($match[0]),$exclude) ) return $match[0];
   return ucfirst($match[0]);
}

现在它将字符串中的所有单词大写,包括我不想要的单词。

2 个答案:

答案 0 :(得分:8)

好吧,我打算尝试对ucfirst_some()进行递归调用,但是你的代码似乎没有第一行就可以正常工作。即:

<?php
$major = 'accounting technology/technician and bookkeeping';
$major = preg_replace_callback("/[a-zA-Z]+/",'ucfirst_some',$major);
echo ucfirst($major);

function ucfirst_some($match) {
   $exclude = array('and','of','the');
   if ( in_array(strtolower($match[0]),$exclude) ) return $match[0];
   return ucfirst($match[0]);
}

打印所需的Accounting Technology/Technician and Bookkeeping

你的正则表达式已匹配字母字符串,你似乎根本不需要担心斜杠。请注意,单词中间的数字或符号[如连字符]也会导致大小写。

另外,无视那些因你的$exclude阵列不够完整而喋喋不休的人,你可以随时添加更多的单词。或者只是谷歌列表。

It should be noted that there is no single, agreed-upon "correct" way to determing what should/should not be capitalized in this way.

答案 1 :(得分:1)

你还要确保在句子开头是否使用了像an和the这样的单词,它们都是大写的。

注意:我不能想到任何这样的术语,或者从一开始就开始,但在奇怪的数据进入你的程序之前更容易解决这类问题。

我之前使用过一个代码片段 http://codesnippets.joyent.com/posts/show/716

在php.net功能页面上引用了评论部分中的ucwords http://php.net/manual/en/function.ucwords.php#84920