幼儿园101教导我们中的一些人:"你名字中的字母应该是小写的,大写的第一个字母." 然而在这个后文化时代,人们如何在网络形式中输入他们的名字似乎取决于他们的心情,或太阳耀斑或诸如此类:全部大写,全部小写,混合,颠倒......
哲学上,我说什么!占据你的名字,谁在乎.但我有OCD客户端,他们更喜欢看到数据标准化,标准化,可预测.所以我问你们,如果你看到任何经过深思熟虑的PHP函数用于修复案例的名称,那么考虑到ucwords()完全屠宰的各种例外情况,例如:
试图容纳这些字母反叛者的任何功能?
更新
从Robin v.G.的征服点来看,没有任何脚本可以统治它们.但是我已经确定完全以小写或大写形式输入的名字可能是一个很好的擦洗的候选人.所以对于这些,我会做......
if ($name == strtoupper($name) || $name == strtolower($name)) {
$name = ucwords(strtolower($name));
}
Run Code Online (Sandbox Code Playgroud)
修改这个以修复一些可能的例外很容易:破折号,撇号,"McD"等.将会出现错误,但谁会抱怨?不是以小写字母输入他们名字的温柔的混蛋.
哦等等,我的名字是小写的......
这是一个尝试
$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这样的名称.
| 归档时间: |
|
| 查看次数: |
1034 次 |
| 最近记录: |