如何在JavaScript中将名称放入标题格中?

如何在JavaScript中将名称放入标题格中?,javascript,regex,coldfusion-8,Javascript,Regex,Coldfusion 8,我一直在研究如何使用JavaScript将名称设置为大小写,例如george mchall将成为george mchall。我找到了一篇关于Codeproject如何做到这一点的文章,以及一位打算让它做到这一点的人: function toProperCase(s){ return s.toLowerCase().replace( /\b((m)(a?c))?(\w)/g, function($1, $2, $3, $4, $5) { if($2){ return $3

我一直在研究如何使用JavaScript将名称设置为大小写,例如george mchall将成为george mchall。我找到了一篇关于Codeproject如何做到这一点的文章,以及一位打算让它做到这一点的人:

function toProperCase(s){
    return s.toLowerCase().replace( /\b((m)(a?c))?(\w)/g,
    function($1, $2, $3, $4, $5) {
  if($2){
   return $3.toUpperCase()+$4+$5.toUpperCase();
  } 
  return $1.toUpperCase(); 
 });
}
这就是我想要的。但我需要能够进一步扩展它并添加其他案例

我发现我在做标题格,但我只是在看名字

那么,有没有人有扩展它的想法?我只是在寻找一个正确的方向

编辑: 因为我似乎碰到了一堵墙,也许有人有办法在服务器端做到这一点。这至少是目前在服务器端使用ColdFusion的情况。我已经看到了C#的实现,但目前我无法转移到C#

这个怎么样:

if (str==str.toLowerCase() || str==str.toUpperCase())
  str = str.toTitleCase();
否则,就别管它了


编辑:您可以选择拆分字符串,以剔除按住shift键时间过长的人,如SMith。

结合类似帖子中的一些答案:

function properName(name) {
  return ("" + name.replace(/[^\s\-\']+[\s\-\']*/g, function (word) {
    return word.charAt(0).toUpperCase() + word.substr(1).toLowerCase();
  }).replace(/\b(Van|De|Der|Da|Von)\b/g, function (nobiliaryParticle) {
    return nobiliaryParticle.toLowerCase();
  }).replace(/Mc(.)/g, function (match, letter3) {
    return 'Mc' + letter3.toUpperCase();
  }));
}
这任意地将字母大写在“Mc”之后,而不是“Mac”之后,并且不处理像LaSalle或terHorst这样的名称(因为我不需要它们)


下面是一个例子(使用2016年澳大利亚联邦选举的候选人)。

这是一个比乍一看更复杂的问题。您必须考虑Mac/Mc以外的情况。例如,O'Brien、D'Agostino、LaSalle等。Regex可能不是实现这一点的最佳工具。你可能不得不求助于某种词典,它已经解释了带有“and”的名称,因为正则表达式将这些名称作为一个新词,放在连字符或撇号之后。而regex已经对Mc/Mac进行了核算。我真的想解释洛杉矶的案子。不管我错过了什么,一旦我知道如何继续扩展它,我应该知道如何添加。这也不是什么关键任务,我只是尽可能多地捕捉一致的输出。还要考虑拉丁语的各种名称,比如“奥斯卡de La ReTrand”,其中“DE”和“La”是不大写的。提姆:问题是区分拉塞特和LaSalle的姓氏。“这不是你能用正则表达式做的事情。”蒂姆·米尔斯:只是想到了另一个丑陋的例外。谷歌“杰罗德·特霍斯特”,他是杰拉尔德·福特的新闻秘书。我想你会发现用正则表达式实现这一点没有“完美”的方法。在问题注释中讨论后,这是“最佳”解决方案。然而,
toTitleCase()
对我来说根本不起作用。也许详细说明你的答案会有帮助。对不起,我以为这是一个内置函数。这里有一个可以让它工作的实现:把这个作为我的答案,因为它“足够好”,应该至少尝试抓住那些违反大写锁的人,这似乎是最广泛的违规群体。是的,“足够好”是我在PHP中做这件事时发现的。不可能解释所有可能的混合姓氏。