Pergunta

Há o padrão A-Z, caracteres A-Z, mas também existem hífens, em traços, aspas, etc.

Além disso, há todos os caracteres internacionais, como tremas, etc.

Assim, para um sistema baseado em Inglês, que é o conjunto completo? E sobre conjuntos para outros idiomas? E sobre UTF8, UTF16, etc?

Bônus pergunta: Quantos são necessários campos de nome, e quais são seus comprimentos máximos

EDIT: Há definitivamente dois tipos diferentes de personagens envolvidos em nomes de pessoas, aqueles que estão lá como parte do contexto, e aqueles que estão lá por razões estruturais. Eu não quero limitar ou interferir com os caracteres de contexto, mas eu faço necessidade de lidar com as estruturais.

Por exemplo, eu tinha um nome vêm em que foi separada por um traço, mas era difícil distinguir que a partir do caráter de menos. Para tornar o sistema mais fácil para busca, eu quero tirar todos os cinco tipos diferentes de traços, e mapeá-los para um carácter único (menos), de que maneira o usuário não precisa saber especificamente quais símbolo foi inicialmente inscritas.

O problema existe por traços, provavelmente cita bem, mas também como muitos outros símbolos?

Foi útil?

Solução

Não é bom artigo do W3C chamado nomes pessoais em todo o mundo que explica os problemas (e possíveis soluções) muito bem (era originalmente um post no blog de duas partes por Richard Ishida: parte 1 e parte 2 )

Pessoalmente, eu diria: apoiar cada impressão Unicode caracteres e ser seguro fornecer apenas um único campo "nome" que contém o nome completo, formatado. Desta forma, você pode armazenar praticamente toda forma de nome. Você pode precisar de um armazenamento mais estruturado, mas então não espere para ser capaz de armazenar cada combinação única de uma forma estruturada, pois há simplesmente demasiado muitos diferentes.

Outras dicas

caracteres whitelisting que podem aparecer no nome de uma pessoa é o caminho errado para ir, se você me perguntar. Claro, [A-Za-z] é uma feira de ponto de partida, mas, como você disse, você tem problemas com nomes "europeus". Então você mapear todas as tremas, circumflexes e aqueles. E sobre nomes chineses? Japonês? Indiano? Hebraico? Você está entrando em uma batalha contra as turbinas eólicas.

Se você absolutamente deve verificar a validade do nome de alguém, eu sugiro fazer uma lista negra modesta de certos caracteres. Chaves, caracteres matemáticos, alguns sinais de pontuação e tal pode estar seguro ignorar. Mas eu seria cauteloso, se eu fosse você.

Pode ser melhor apenas aceitar tudo o que vem em. UTF-16 deve ser conjunto de caracteres exagero de hoje, que deve ser adequada para alguns anos.

Editar: Quanto à sua pergunta sobre o comprimento do nome e quantidade de nomes. Se você realmente quer que as pessoas escrevem seus nomes verdadeiros e completos, eu acho que a resposta só infalível para ambas as perguntas seria "infinito". Não ser capaz de sacar qualquer exemplos reais para os seres humanos, mas certamente há exemplos análogos para os seres humanos como o nome nativo para a cidade de Bangkok .

Eu não acho que há uma resposta definitiva. Afinal, algumas pessoas têm nomes que não pode sequer ser expressos em UTF-16 ...

Príncipe símbolo

Há algumas pessoas estranhas lá fora, que vai dar aos filhos o mais louco de nomes, inclusive colocando na pontuação estranho, acentos que não existem em sua própria língua, etc.

No entanto, você pode colocar arbitrária restrições ao seu banco de dados. Se você quiser você pode insistir em 7 nomes bit ASCII. É um pouco rude com os usuários, mas eles vão viver com ela. Ele certamente torna a pesquisa mais fácil.

filha do meu colega é nomeado Amélie. Mas até mesmo alguns (não todos!) Sites oficiais do governo britânico ( "Por favor, digite o nome exatamente como mostrado na certidão de nascimento") não aceitará a unicode, então ele tem que usar 'Amelie' em vez.

Qualquer personagem que pode ser representado por qualquer múltiplo de oito bits (maior que zero) é um possível caráter para o nome de uma pessoa. Comprimentos de ambos os nomes e codificações são arbitrárias, assim não há limite superior deve ser considerado.

Apenas certifique-se de higienizar suas entradas de banco de dados tão pouco Bobby drop-tabelas não fica ya.

Sobre a questão dos campos de nome, o ERRADO resposta é primeiro nome, inicial do meio, sobrenome, etc., por muitas razões.

  1. Muitas pessoas são conhecidos pelo seu nome do meio, e formalmente usar um primeiro nome inicial, médio, último formato de nome.

  2. Em algumas culturas, o sobrenome é o primeiro nome, eo nome dado é o último nome.

  3. Vários primeiros e / ou médio nomes dados está ficando mais comum. Como aponta @Dour alta Arch, o outro extremo é que as pessoas com apenas uma palavra em seu nome.

Em um banco de dados orientado a objetos, você iria armazenar um objeto Name com métodos para retornar um estilo de diretório ou nome de estilo assinatura; e o armazenamento de backup deve conter todos os dados que foi necessário para suportar esses métodos.

Eu ainda não vi um modelo de banco de dados relacional que melhora sobre o modelo de duas cadeias de comprimento variável para nomes de estilo diretório e assinatura de estilo.

É realmente depende do que o app é suposto ser usado para.

Claro, em teoria, que é ótimo se você permitir que todos os scripts na terra verde de Deus para ser usado, mas se o DB também é usado pelo pessoal de apoio, eles vão ser capazes de nomes punho em japonês, hebraico e roteiro Thai? Você pode impressora, se ele é usado para imprimir etiquetas porte?

Você pode adicionar um campo extra "Latin Transcrição", mas IMO é realmente OK para limitar a ISO-8859-1 caracteres - Pessoas que não usam caracteres latinos são agora tão acostumados a ter que usar uma transcrição que eles não se importam mais, a menos que sejam nacionalistas hardcore.

Eu estou fazendo software para escolas de condução nos EUA, por isso para mim o que mais importa o que o estado DMV de aceitar como um nome próprio em uma carteira de motorista. No meu caso, isso poderia causar problemas para permitir que nomes além do que a DMV permite que, mesmo que tais nomes eram legais porque o mesmo nome deve ser usado posteriormente para uma carteira de motorista.

De StackOverflow, eu ainda não tinha confirmado a resposta que eu precisava. E acontece que eu sei que no meu estado (Califórnia) que está usando AS400 Com software provavelmente escrito em COBOL, e ao melhor de meu conhecimento, aqueles que suportam apenas um conjunto de caracteres de 8 bits. (É EBCDIC?) Enfim ... Ugh.

Então, eu chamei o suficiente Califórnia DMV ... Claro, o sistema permite que A-Z e espaços e absolutamente nada mais. Nem mesmo hífens são permitidos - hífens são substituídas por espaços. Na verdade, aparentemente, apenas para ser difícil, eles só usam capitais. E nomes como "O'Malley" deve ser substituído por Omalley.

Deixe-o ao governo. Devo dizer que estou emocionado para não ser um desenvolvedor trabalhando para DMV. (Embora eu poderia realmente usar esse tipo de salário.)

UTF-8 deve ser bom o suficiente, na medida em campos de nome, você vai querer no mínimo um primeiro nome e sobrenome.

O que você faz quando você tem "o artista anteriormente conhecido como o príncipe". Esse símbolo que ele usou não é um caractere no conjunto de unicode (AFAIK).

É alguma leveza, mas, ao mesmo tempo, os nomes são um conceito bastante amplo que não se presta bem a um formato estruturado. Neste caso, algo de forma livre pode ser mais adequada.

Dependendo da complexidade de sua estrutura nome que eu podia ver:

  1. Nome
  2. Middle Inicial / nome do meio
  3. Apelido
  4. Sufixo (Jr. Ir II, III, IV, etc.)
  5. Prefixo (Sr., Sra, Ms., etc.)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top