101幼儿园教导我们中的一些人:“你名字中的字母应该小写,首字母大写。”然而在这个后文字时代,人们如何在网络表单中输入名字似乎取决于他们的心情,或太阳耀斑或诸如此类的东西:全部大写,全部小写,混合,颠倒......
从哲学上来说,我说什么都行!占用你的名字,谁在乎。但我有强制症客户,他们更喜欢看到数据规范化、标准化、可预测。所以我问你们是否见过任何经过深思熟虑的用于修复名称大小写的 PHP 函数,这些函数考虑了 ucwords() 会完全破坏的各种异常,例如:
- 斯文-亚历克斯·克鲁姆佩特
- 罗纳尔多·麦克唐纳
- 布西·奥布莱恩
- J.R.鲍勃·多布斯
- 弗朗西斯卡·德洛斯·加托斯
- 李永成
有任何函数试图容纳这些字母叛逆者吗?
更新
从 Robin v.G. 的角度来看,不可能有剧本来统治这一切。但我认为完全以小写或大写形式输入的名称可能需要进行良好的清理。所以对于这些,我会做...
if ($name == strtoupper($name) || $name == strtolower($name)) {
$name = ucwords(strtolower($name));
}
修改它来修复一些可能的异常是很容易的:破折号、撇号、“McD”等。错误会发生,但谁会提示呢?不是那个用小写字母输入名字的温顺 SCSS 。
哦等等,我的名字是小写的......
最佳答案
这根本不可能。
正如您在问题中所示,名称的拼写因国家/地区而异。最简单的方法是找到最常见的拼写方式,这就是将每个“单词”的每个第一个字母大写,即每个字符串前面都有空格、连字符、点或撇号。
这并不能解决你所有的问题(YungCheng、McDonald),而且还会给你带来其他问题,但这已经是你能得到的最接近的结果了。
比较:
- Alex Van Halen(美国拼写)
- Alex van Halen(正确的荷兰语拼写)
没有算法可以解决这个问题。
This article很好地说明了荷兰语名字的问题,而那只是一种语言。世界上的每种语言可能都有这样的文章。 ;)
关于php - 有人知道修复名称大小写的优雅函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12928416/