有标准的A-Z,a-z字符,但也有连字符,短划线,引号等。

另外,还有所有的国际角色,如变形金刚等。

那么,对于基于英语的系统,完整的设置是什么?那些其他语言的集合呢?那么UTF8,UTF16等呢?

奖金问题:需要多少名称字段,以及它们的最大长度是多少?

编辑:人名中肯定有两种不同类型的字符,那些作为上下文的一部分的字符,以及那些由于结构原因而存在的字符。我不想限制或干扰上下文字符,但我确实需要处理结构上的字符。

例如,我有一个由em破折号分隔的名称,但很难将其与减号区分开来。为了使系统更容易搜索,我想采用所有五种不同类型的破折号,并将它们映射到一个唯一字符(减号),这样搜索者就不需要具体知道最初输入的符号。

破折号存在问题,可能还有引号,还有多少其他符号?

有帮助吗?

解决方案

W3C上有一篇很好的文章叫做世界各地的个人名字这很好地解释了问题(和可能的解决方案)(最初由Richard Ishida撰写的两部分博客文章:第1部分第2部分

就个人而言,我会说:支持每个可打印的Unicode字符并且安全地只提供单个字段“name”。包含完整的格式化名称。通过这种方式,您可以存储几乎所有形式的名称。您可能需要更结构化的存储,但是不要期望能够以结构化形式存储每个组合,因为存在太多不同的存储。

其他提示

如果你问我,

将人名中出现的字符列入白名单是错误的方法。当然,[A-Za-z]是一个公平的起点,但正如你所说,你会遇到“欧洲”的问题。名。所以你映射了所有的变音符号,回音符号和那些符号。中国名字怎么样?日本?印度?希伯来语?你正在与风力涡轮机进行战斗。

如果您绝对必须检查某人姓名的有效性,我建议您对某些字符进行适度的黑名单。大括号,数学字符,一些标点符号等都可以安全地忽略。但如果我是你,我会保持谨慎。

最好只接受所有内容.UTF-16应该是今天的矫枉过正字符集,在未来几年应该足够了。

修改:关于姓名长度和姓名数量的问题。如果你真的希望人们写出他们的真实和完整的名字,我想这两个问题的唯一万无一失的答案将是“无限的”。无法为人类提供任何真实的例子,但肯定有人类的类似例子,如曼谷市的本地名称

我认为没有明确的答案。毕竟,有些人的名字甚至无法用UTF-16表达......

那里有一些奇怪的人,会给他们的孩子最疯狂的名字,包括加入奇怪的标点符号,用他们自己的语言不存在的口音等等。

但是,您可以对数据库设置任意限制。如果你愿意,你可以坚持使用7位ASCII名称。这对用户来说有点粗鲁,但他们会忍受它。它确实使搜索更容易。

我同事的女儿名叫Amé谎言。但即使是一些(并非所有!)官方英国政府网站(“请输入与出生证明上显示的名称完全相同的名称”)也不会接受unicode,因此他必须使用'Amelie'代替。

任何可由八位(大于零)的倍数表示的字符都是人名的可能字符。名称和编码的长度都是任意长度,因此不应考虑上限。

请确保您清理数据库输入,这样很少有Bobby Drop-table无法获得。

在名称字段问题上, 错误 答案是名字,中间姓名,姓氏等,原因有很多。

  1. 许多人都以他们的中间名称而闻名,并正式使用第一个初始,中间名,姓氏格式。

  2. 在某些文化中,姓氏是名字,姓名是姓氏。

  3. 多个第一个和/或中间给定的名称越来越常见。正如@Dour High Arch指出的那样,另一个极端是人们名字中只有一个字。

  4. 在面向对象的数据库中,您将使用方法存储Name对象以返回目录样式或签名样式的名称;并且后备存储将包含支持这些方法所需的任何数据。

    我还没有看到关系数据库模型改进了目录样式和签名样式名称的两个可变长度字符串的模型。

这实际上取决于应用程序应该用于什么。

当然,理论上如果你允许使用上帝绿地上的每个剧本都很棒,但是如果数据库也被支持人员使用,他们是否能够处理日语,希伯来语和泰语脚本的名字?如果它用于打印邮资标签,你可以打印机吗?

你可以添加一个额外的字段“拉丁语转录”,但是IMO可以将它限制为ISO-8859-1字符 - 那些不使用拉丁字符的人现在习惯于使用转录他们不再介意了,除非他们是铁杆民族主义者。

我正在为在美国驾驶学校制作软件,所以对我来说最重要的是国家DMV在驾驶执照上接受的正确名称。在我的情况下,它会导致问题,允许名称超出DMV允许的范围,即使这些名称是合法的,因为以后必须使用相同的名称作为驾驶执照。

从StackOverflow,我仍然没有确认我需要的答案。而且我碰巧知道在我的州(加利福尼亚州),他们使用AS400的软件可能用COBOL编写,据我所知,那些只支持8位字符集。 (是EBCDIC吗?)无论如何......呃。

所以,我打电话给加利福尼亚州的DMV ......果然,他们的系统允许A-Z和空间,绝对没有别的。连字符都不允许 - 连字符用空格替换。事实上,显然只是困难,他们只使用资本。诸如“O'Malley”等名称。必须用OMALLEY替换。

留给政府。我必须说我很高兴不成为DMV的开发人员。 (虽然我真的可以使用那种薪水。)

UTF-8应该足够好了,就姓名字段而言,你至少需要一个名字和最后一个名字。

当你拥有“以前称为王子的艺术家”时,你会怎么做?他使用的那个符号不是unicode集(AFAIK)中的一个字符。

这有点轻浮,但与此同时,名称是一个相当广泛的概念,不适合结构化格式。在这种情况下,自由形式可能是最合适的。

根据您的名称结构的复杂程度,我可以看到:

  1. 名字
  2. 中间名/中间名
  3. 姓氏
  4. 后缀(Jr. Sr. II,III,IV等)
  5. 前缀(先生,夫人,女士等)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top