有人知道一个优雅的功能来修复名称案件?

neo*_*kio 13 php

幼儿园101教导我们中的一些人:"你名字中的字母应该是小写的,大写的第一个字母." 然而在这个后文化时代,人们如何在网络形式中输入他们的名字似乎取决于他们的心情,或太阳耀斑或诸如此类:全部大写,全部小写,混合,颠倒......

哲学上,我说什么!占据你的名字,谁在乎.但我有OCD客户端,他们更喜欢看到数据标准化,标准化,可预测.所以我问你们,如果你看到任何经过深思熟虑的PHP函数用于修复案例的名称,那么考虑到ucwords()完全屠宰的各种例外情况,例如:

  • Sven-Alex Crumpet
  • 罗纳尔多麦克多纳多
  • Boopsie O'Brien
  • JR Bob Dobbs
  • Francesca de los Gatos
  • 李永成

试图容纳这些字母反叛者的任何功能?

更新
从Robin v.G.的征服点来看,没有任何脚本可以统治它们.但是我已经确定完全以小写或大写形式输入的名字可能是一个很好的擦洗的候选人.所以对于这些,我会做......

    if ($name == strtoupper($name) || $name == strtolower($name)) {
        $name = ucwords(strtolower($name));
    }
Run Code Online (Sandbox Code Playgroud)

修改这个以修复一些可能的例外很容易:破折号,撇号,"McD"等.将会出现错误,但谁会抱怨?不是以小写字母输入他们名字的温柔的混蛋.

哦等等,我的名字是小写的......

She*_*ock 8

这根本不可能.

正如您在问题中所示,姓名的拼写因国家/地区而异.最简单的方法是找到最常用的拼写方式,即将每个'单词'的每个首字母大写,即每个字符串前面都有空格,连字符,点或熵.

这并不能解决你所有的问题(YungCheng,McDonaldo),也会让你遇到其他问题,但这就像你要得到的那样近.

相比:

  • Alex Van Halen(美国拼写)
  • Alex van Halen(正确的荷兰语拼写)

没有算法来解决这个问题.

本文很好地说明了荷兰语名称的问题,而这只是一种语言.对于世界上的每种语言,可能都有这样的文章.;)


dav*_*rad 5

这是一个尝试

$names=array();
$names[]="sven-alex crumpet";
$names[]="RONALDO McDonalDO";
$names[]="Boopsie o'Brien";
$names[]="j.r. BOB DOBBS";
$names[]="francesca DE LOS gatOS";
$names[]="yungcheng LI";
$names[]="mr hankey";
$names[]="santas little helper";
$names[]="j.r.r. tolkien";

$splitters=array(' ','.',"'",'-'); //more to come
$fixedNames=array();

foreach($names as $name) {
    $fixed='';
    $blank=str_replace($splitters,'?',$name);
    $n=explode('?',$blank);
    foreach($n as $f) $fixed.=ucfirst(strtolower($f)).' ';
    for ($i=0;$i<strlen($fixed);$i++) {
        if ($fixed[$i]==' ') {
            if ($blank[$i]=='?') {
                $fixed[$i]=$name[$i];
            }
        }
    }
    $fixedNames[]=substr_replace($fixed,'', -1);
}

echo '<pre>';
print_r($fixedNames);
echo '<pre>';
Run Code Online (Sandbox Code Playgroud)

输出

Array
(
    [0] => Sven-Alex Crumpet
    [1] => Ronaldo Mcdonaldo
    [2] => Boopsie O'Brien
    [3] => J.R. Bob Dobbs
    [4] => Francesca De Los Gatos
    [5] => Yungcheng Li
    [6] => Mr Hankey
    [7] => Santas Little Helper
    [8] => J.R.R. Tolkien
)
Run Code Online (Sandbox Code Playgroud)

如果没有算法处理区域/文化惯例和一个巨大的名称数据库来比较,就不可能"纠正"YungCheng这样的名称.