標準のA〜Z、a〜zの文字がありますが、ハイフン、emダッシュ、引用符などもあります。
さらに、ウムラウトなどのすべての国際文字があります。
それで、英語ベースのシステムの場合、完全なセットは何ですか?他の言語のセットはどうですか? UTF8、UTF16などはどうですか?
おまけの質問:名前フィールドはいくつ必要ですか、また最大長はいくつですか?
編集:人々の名前に含まれる文字には、明らかにコンテキストの一部として存在する文字と、構造上の理由から存在する文字の2種類があります。コンテキスト文字を制限したり干渉したりしたくありませんが、構造的な文字に対処する必要があります。
たとえば、ダッシュで区切られた名前が入っていましたが、マイナス文字と区別するのは困難でした。システムを検索しやすくするために、5種類すべてのダッシュを取り、それらを1つの一意の文字(マイナス)にマッピングします。これにより、検索者は最初に入力された記号を特に知る必要がありません。
問題はダッシュ、おそらく引用符にも存在しますが、他にいくつのシンボルがありますか?
人の名前に登場する可能性のある文字をホワイトリストに登録することは、私に尋ねると間違った方法です。確かに、[A-Za-z]は公正な出発点ですが、あなたが言ったように、「ヨーロッパ」の名前に問題があります。したがって、すべてのウムラウト、サーカムフレックス、およびそれらをマップします。中国語の名前はどうですか?日本語?インド人?ヘブライ語?風力タービンとの戦いに参加しています。
あなたが絶対に誰かの名前の正当性をチェックしなければならない場合、特定のキャラクターの控えめなブラックリストを行うことをお勧めします。中括弧、数学文字、句読点などは無視しても安全です。しかし、私があなただったら、私は用心します。
入ってくるものはすべて受け入れるのが最善かもしれません。UTF-16は今日の過剰な文字セットであるはずであり、今後数年間は十分なはずです。
Edit:名前の長さと名前の量についての質問について。人々に本当の名前と完全な名前を書いてもらいたいのなら、これらの質問に対する絶対確実な答えは「無限」だけだと思います。人間の実際の例を挙げることはできませんが、確かに バンコク市のネイティブ名 のような人間の類似した例があります。
決定的な答えはないと思います。結局、一部の人々はUTF-16で表現することさえできない名前を持っています...
奇妙な句読点を入れたり、自分の言語にはないアクセントを入れたりするなど、子供たちに最もクレイジーな名前を付ける奇妙な人々がいます。
ただし、データベースに任意の制限を設定できます。必要に応じて、7ビットASCIIの名前を主張することができます。ユーザーにとっては少し失礼ですが、一緒に暮らすでしょう。確かに検索が容易になります。
同僚の娘の名前はアメリです。しかし、一部の(すべてではありません!)英国政府の公式Webサイト(「出生証明書に表示されている名前を正確に入力してください」)でもユニコードを受け入れないため、代わりに「Amelie」を使用する必要があります。
名前フィールドの問題では、[〜#〜] wrong [〜#〜]答えは名、ミドル多くの理由で、イニシャル、ラストネームなど。
多くの人はミドルネームで知られており、正式には最初のイニシャル、ミドルネーム、ラストネームの形式を使用しています。
一部の文化では、姓は名であり、名は姓です。
複数のファーストネームやミドルネームが一般的になっています。 @Dour High Archが指摘しているように、もう1つの極端な例は、名前にWordが1つしかない人です。
オブジェクト指向データベースでは、ディレクトリスタイルまたは署名スタイルの名前を返すメソッドを含むNameオブジェクトを保存します。また、バッキングストアには、これらのメソッドをサポートするために必要なデータが含まれます。
ディレクトリスタイルと署名スタイルの名前の2つの可変長文字列のモデルを改良したリレーショナルデータベースモデルはまだ見ていません。
8ビットの倍数(ゼロより大きい)で表現できる文字は、人の名前に使用できる文字です。名前とエンコーディングの両方の長さは任意であるため、上限を考慮する必要はありません。
データベース入力をサニタイズして、Bobby Drop-tablesがほとんど動かないようにしてください。
それは本当にアプリが何に使用されることになっているかに依存します。
もちろん、理論的には、神の緑の地球上のすべてのスクリプトを使用できるようにすることは素晴らしいことですが、DBがサポートスタッフによっても使用される場合、日本語、ヘブライ語、タイ語のスクリプトで名前を処理できますか?郵便ラベルの印刷に使用されている場合、印刷できますか?
追加のフィールド「Latin Transcription」を追加することもできますが、IMOでISO-8859-1文字に制限してもかまいません-ラテン文字を使用しない人は、今では転写を使用する必要があることに慣れています。彼らが筋金入りの民族主義者でない限り、もう気にしないでください。
私はアメリカの自動車教習所用のソフトウェアを作っているので、私にとって最も重要なことは、州のDMVが運転免許証の適切な名前として受け入れるものです。私の場合、同じ名前を後で運転免許証に使用する必要があるため、そのような名前が合法であったとしても、DMVが許可する名前を超えて名前を許可することは問題を引き起こします。
StackOverflowから、必要な答えをまだ確認していませんでした。私の州(Calif)では、おそらくCOBOLで書かれたソフトウェアでAS400を使用していることを知りました。私の知る限り、これらは8ビット文字セットのみをサポートしています。 (それはEBCDICですか?)とにかく...うーん。
それで、私はカリフォルニアDMVと呼びました...案の定、彼らのシステムはA-Zとスペースを許可し、他には何も許可しません。ハイフンさえ許可されていません-ハイフンはスペースに置き換えられます。実際、明らかに難しいのは、大文字のみを使用していることです。また、「O'Malley」などの名前は、OMALLEYに置き換える必要があります。
政府に任せてください。私は、DMVで働いている開発者ではないことにわくわくしています。 (私は本当にその種の給料を使うことができましたが。)
名前フィールドに関しては、UTF-8で十分です。少なくとも名と姓が必要です。
「かつて王子として知られていたアーティスト」がいるときはどうしますか。彼が使用したシンボルは、ユニコードセット(AFAIK)の文字ではありません。
それはある程度の軽さですが、同時に、名前は構造化された形式にはあまり適していないかなり広い概念です。この場合、自由形式のものが最適です。