代码之家  ›  专栏  ›  技术社区  ›  Tim Meers

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

  •  2
  • Tim Meers  · 技术社区  · 15 年前

    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 回复  |  直到 15 年前
        1
  •  4
  •   Nathan MacInnes    15 年前

    这个怎么样:

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

    否则,别管它!!!

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

        2
  •  2
  •   jondoig    10 年前

    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 Grayndler 在澳大利亚2016年的联邦选举中)。