Pregunta

Hay los caracteres A-Z estándar, a-z, pero también hay guiones, guiones, comillas, etc.

Además, hay todos los caracteres internacionales, como diéresis, etc.

Entonces, para un sistema basado en inglés, ¿cuál es el conjunto completo? ¿Qué hay de conjuntos para otros idiomas? ¿Qué pasa con UTF8, UTF16, etc.?

Pregunta de bonificación: ¿Cuántos campos de nombre se necesitan y cuáles son sus longitudes máximas?

EDITAR: Definitivamente hay dos tipos diferentes de caracteres involucrados en los nombres de las personas, aquellos que están ahí como parte del contexto, y los que están ahí por razones estructurales. No quiero limitar o interferir con los caracteres de contexto, pero sí tengo que tratar con los estructurales.

Por ejemplo, recibí un nombre que estaba separado por un guión de em, pero era difícil distinguirlo del carácter menos. Para facilitar la búsqueda del sistema, quiero tomar los cinco tipos diferentes de guiones y asignarlos a un único carácter (menos), de esa forma el buscador no necesita saber específicamente qué símbolo se ingresó inicialmente.

El problema existe para los guiones, probablemente también las citas, pero también ¿cuántos otros símbolos?

¿Fue útil?

Solución

Hay un buen artículo del W3C llamado Nombres personales en todo el mundo eso explica bastante bien los problemas (y las posibles soluciones) (originalmente fue una publicación de blog de Richard Ishida en dos partes: part 1 y part 2 )

Personalmente, diría: respalde cada carácter Unicode imprimible y, para estar seguro, proporcione un solo campo " nombre " que contiene el nombre completo, formateado. De esta manera puede almacenar prácticamente cualquier forma de nombre. Es posible que necesite un almacenamiento más estructurado, pero no espere poder almacenar cada combinación en una forma estructurada, ya que simplemente hay demasiadas diferentes.

Otros consejos

Los caracteres de la lista blanca que podrían aparecer en el nombre de una persona son el camino equivocado, si me preguntas. Claro, [A-Za-z] es un buen punto de partida, pero, como dijiste, tienes problemas con " Europeo " nombres Así que mapeas todas las diéresis, circunflejos y esos. ¿Qué pasa con los nombres chinos? ¿Japonés? ¿Indio? ¿Hebreo? Estás entrando en una batalla contra los aerogeneradores.

Si absolutamente debe verificar la validez del nombre de alguien, sugeriría hacer una modesta lista negra de ciertos caracteres. Los frenos, los caracteres matemáticos, algunos signos de puntuación y otros podrían ser ignorados. Pero sería cauteloso, si fuera tú.

Podría ser mejor aceptar lo que venga. UTF-16 debería ser el conjunto de caracteres excesivo de hoy, que debería ser adecuado durante los próximos años.

Editar: En cuanto a tu pregunta sobre la longitud del nombre y la cantidad de nombres. Si realmente quieres que la gente escriba sus nombres reales y completos, supongo que la única respuesta infalible para estas dos preguntas sería "infinito". No poder sacar ningún ejemplo real para los seres humanos, pero seguramente hay ejemplos análogos para los humanos como the nombre nativo de la ciudad de Bangkok .

No creo que haya una respuesta definitiva. Después de todo, algunas personas tienen nombres que ni siquiera se pueden expresar en UTF-16 ...

símbolo de Prince

Hay algunas personas extrañas por ahí, que darán a sus hijos el nombre más loco, incluida la puntuación extraña, acentos que no existen en su propio idioma, etc.

Sin embargo, puede colocar restricciones arbitrarias en su base de datos. Si lo desea, puede insistir en nombres ASCII de 7 bits. Es un poco grosero con los usuarios, pero vivirán con eso. Sin duda hace que la búsqueda sea más fácil.

La hija de mi colega se llama Amélie. Pero incluso algunos (¡no todos!) Sitios web oficiales del gobierno británico (" Por favor ingrese el nombre exactamente como se muestra en el certificado de nacimiento ") no aceptarán el código Unicode, por lo que tiene que usar 'Amelie' en su lugar.

Cualquier carácter que pueda representarse por cualquier múltiplo de ocho bits (mayor que cero) es un posible carácter para el nombre de una persona. Las longitudes de ambos nombres y codificaciones son arbitrarias, por lo que no se debe considerar un límite superior.

Solo asegúrate de que desinfectas las entradas de la base de datos para que Bobby Drop-tables no te atrape.

Sobre la cuestión de los campos de nombre, la respuesta PELIGRO es el nombre, la inicial del segundo nombre, el apellido, etc., por muchas razones.

  1. Muchas personas son conocidas por su segundo nombre, y usan formalmente una primera inicial, segundo nombre, formato de apellido.

  2. En algunas culturas, el apellido es el nombre y el nombre es el apellido.

  3. Varios nombres dados primero y / o medio son cada vez más comunes. Como señala @Dour High Arch, el otro extremo es la gente con una sola palabra en su nombre.

En una base de datos orientada a objetos, almacenaría un objeto Nombre con métodos para devolver un estilo de directorio o nombre de estilo de firma; y la tienda de respaldo contendría los datos necesarios para respaldar esos métodos.

Todavía no he visto un modelo de base de datos relacional que mejore el modelo de dos cadenas de longitud variable para nombres de estilo de directorio y estilo de firma.

Realmente depende de para qué se utiliza la aplicación.

Claro, en teoría, es genial si permite que se usen todos los guiones de la tierra verde de dios, pero si el personal de soporte también usa la base de datos, ¿podrán manejar nombres en guiones japoneses, hebreos y tailandeses? ¿Puede imprimir, si se utiliza para imprimir etiquetas de franqueo?

Es posible que agregue un campo adicional " Transcripción latina " ;, pero IMO está realmente bien restringirlo a los caracteres ISO-8859-1: las personas que no usan caracteres latinos están acostumbradas a usar una transcripción. que ya no les importa, a menos que sean nacionalistas incondicionales.

Estoy creando software para escuelas de manejo en los EE. UU., así que lo que más me importa es lo que el DMV estatal acepta como nombre propio en una licencia de conducir. En mi caso, causaría problemas para permitir nombres más allá de lo que permite el DMV, incluso si dichos nombres fueran legales porque el mismo nombre debe usarse más adelante para una licencia de conducir.

Desde StackOverflow, todavía no había confirmado la respuesta que necesitaba. Y tengo la certeza de que en mi estado (California) están usando AS400 con software probablemente escrito en COBOL, y que yo sepa, solo son compatibles con un conjunto de caracteres de 8 bits. (¿Es EBCDIC?) De todos modos ... Ugh.

Entonces, llamé al DMV de California ... Efectivamente, su sistema permite A-Z y espacios y absolutamente nada más. Ni siquiera se permiten guiones - Los guiones se reemplazan con espacios. De hecho, aparentemente solo para ser difíciles, solo usan mayúsculas. Y nombres como " O'Malley " debe ser reemplazado con OMALLEY.

Déjalo al gobierno. Debo decir que estoy encantado de no ser un desarrollador que trabaja para el DMV. (Aunque realmente podría usar ese tipo de salario).

UTF-8 debería ser lo suficientemente bueno, en cuanto a los campos de nombre, querrá tener, como mínimo, un nombre y un apellido.

¿Qué haces cuando tienes " El artista anteriormente conocido como Prince " ;. Ese símbolo que utilizó no es un carácter en el conjunto de Unicode (AFAIK).

Es algo de ligereza, pero al mismo tiempo, los nombres son un concepto bastante amplio que no se presta bien a un formato estructurado. En este caso, algo de forma libre podría ser lo más apropiado.

Dependiendo de la complejidad de su estructura de nombre, podría ver:

  1. Nombre
  2. Inicial del segundo nombre / Segundo nombre
  3. Apellido
  4. Sufijo (Jr. Sr. II, III, IV, etc.)
  5. Prefijo (Sr., Sra., Sra., etc.)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top