PHP中姓氏的正确大写

时间:2012-05-14 09:21:32

标签: php regex capitalization

  

可能重复:
  Capitalization of Person names in programming

我注意到在我网站上注册的人非常懒惰,因为他们甚至不打扰自己的名字。

我的网站是一个面向业务的网站,所以这里没有“自我表达自由”的论点。

首字母大写非常容易,因为我无法想到西方名字不会以大写字母开头的单一实例。我错了。

但是将姓氏大写变得更加困难,名称如

O'Brien
O´Flaherty
de Wit
McKenzie
Auditore da Firenze
de los Remedios de Escalada
Virta-Jokela

在PHP中使用适当的自动大写字母来解决这个问题的好方法是什么呢?我知道this

3 个答案:

答案 0 :(得分:4)

这是一个快速而肮脏的解决方案:

  1. 将字符串拆分为由空格和短划线分隔的单词
  2. 每个单词:
    • 如果它在一个固定的停用词列表中(“de”,“los”等),请不要修改。
    • 如果没有,请检查它是否在固定列表中有前缀(此列表将包含“O”,“Mc”等内容)。如果存在这样的前缀,则将其标准化(例如,将O"翻译为O')并考虑不带前缀的单词进入下一步。
    • 大写字母的第一个字母。

答案 1 :(得分:1)

起初,这似乎是一项简单的工作:只需将您在姓氏中遇到的每个单词都大写。因此foo bar将成为Foo Bar

但是,正如您已经指出的那样,也有例外:

  • de Wit
  • Auditore da Firenze
  • de los Remedios

这可以通过一个你不想大写的片段黑名单来解决(给出这个例子的'de','da','de los')。但是你错误地认为'De','Da'和'De Los'不存在应该大写的(部分)姓氏。

所以简单地说:不,这不可能做得很好,只有半智能。

答案 2 :(得分:-1)

它使每个字母的第一个字符为$name = ucwords(strtolower($name));

对于超过95%的案例,这是准确的。

目前尚不清楚,您希望de los Remedios de Escalada如何?使用上面的表达式,它将变为De Los Remedios De Escalada。如果需要,我不确定。

另一种方法是用“”爆炸名称,并使用ucword()

制作姓氏大写的第一个字符