如何在JavaScript中将名称放入标题大小写?

时间:2010-11-09 14:05:09

标签: javascript regex coldfusion-8

我一直在研究如何使用JavaScript将名称设置为正确的大小写,例如乔治·麦克尔将成为乔治·麦克霍尔。我能够在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(); 
 });
}

这允许我正在寻找的东西。但我需要能够进一步扩展它并添加其他案例。

我发现another page on John Gruber's site做了标题案例,但我只是在做名字。

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

编辑: 由于我似乎在这里碰壁,也许有人有办法做服务器端。这至少目前在服务器端使用ColdFusion。我见过C#实现,但此刻我无法转向C#。

2 个答案:

答案 0 :(得分:3)

这个怎么样:

if (str==str.toLowerCase() || str==str.toUpperCase())
  str = str.toTitleCase();

否则,请妥善保管!

编辑:您可以选择拆分字符串以清除持有Shift键的人太长时间,例如SMith。

答案 1 :(得分:1)

结合类似帖子的几个答案:

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这样的名字(因为我不需要它们)。

这是JSFiddle(使用澳大利亚2016年联邦选举中Grayndler的候选人)。