3

重複の可能性:
プログラミングでの人名の大文字化

私のサイトに登録している人々は、自分の名前を大文字にすることさえ気にしないという点で、非常に怠惰であることに気付きました。

私のサイトはビジネス指向のサイトなので、「自己表現の自由」という議論はありません。

ファースト ネームの大文字化は非常に簡単です。なぜなら、西洋のファースト ネームが大文字で始まらないという単一の例が思い浮かばないからです。私は間違っているかもしれません。

しかし、姓を大文字にすることはより難しくなります。

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

PHP で姓の適切な自動大文字化を行い、95% の確率で正しい解決策を見つけるにはどうすればよいでしょうか? 私はこれを認識しています。

4

3 に答える 3

4

これは、上からの迅速で汚い解決策です。

  1. 文字列を空白とダッシュで区切られた単語に分割します
  2. 各単語について:
    • ストップ ワード (「de」、「los」など) の固定リスト内にある場合は、変更しないでください。
    • そうでない場合は、固定リストにプレフィックスがあるかどうかを確認します (このリストには、「O'」、「Mc」などが含まれます)。O"そのような接頭辞が存在する場合は、それを正規化し (たとえばに変換O')、接頭辞のない単語を考慮して次のステップに進みます。
    • 単語の最初の文字を大文字にします。
于 2012-05-14T09:28:47.680 に答える
1

最初は簡単な仕事のように思えます。名前に出くわしたすべての単語を大文字にするだけです。だからfoo barになりFoo Barます。

ただし、すでに指摘したように、例外があります。

  • デウィット
  • オーディトーレダフィレンツェ
  • デロスレメディオス

これは、大文字にしたくないフラグメントのブラックリストで解決できます(この例では、「de」、「da」、「de los」)。しかし、「De」、「Da」、および「De Los」は、大文字にする必要のある名前(の一部)として存在しないと誤って想定します。

簡単に言うと、いいえ、これはうまくできません。

于 2012-05-14T09:33:07.373 に答える
-1

各文字の最初の文字を大文字にします$name = ucwords(strtolower($name));

これは、95% 以上のケースで正確です。

明確ではありませんが、どのようになりたいde los Remedios de Escaladaですか?上記の式では となりDe Los Remedios De Escaladaます。それが望まれるかどうかはわかりません。

別の方法は、名前を " " で分解し、Last word の最初の文字を大文字にすることです。ucword()

于 2012-05-14T09:35:48.260 に答える