如何将每个单词的首字母大写,如双字城市?

pep*_*epe 248 javascript

当城市有一个词时,我的JS很好:

  • cHIcaGO ==>芝加哥

但是当它的时候

  • san diego ==>圣地亚哥

我怎样才能成为圣地亚哥?

function convert_case() {
    document.profile_form.city.value =
        document.profile_form.city.value.substr(0,1).toUpperCase() + 
        document.profile_form.city.value.substr(1).toLowerCase();
}
Run Code Online (Sandbox Code Playgroud)

Dex*_*ter 626

有一个很好的答案在这里:

function toTitleCase(str) {
    return str.replace(/\w\S*/g, function(txt){
        return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
    });
}
Run Code Online (Sandbox Code Playgroud)

或者在ES6中:

var text = "foo bar loo zoo moo";
text = text.toLowerCase()
    .split(' ')
    .map((s) => s.charAt(0).toUpperCase() + s.substring(1))
    .join(' ');
Run Code Online (Sandbox Code Playgroud)

  • 好的剧本,但它不适用于变音符号例如,它会将"andersångström"转换为"AndersåNgström".如果您需要脚本来处理此类字符串,请查看http://stackoverflow.com/questions/15150168/title-case-in-javascript-for-diacritics-non-ascii (12认同)
  • 它实际上并没有传入`str` - 它传递的是"匹配的子串" - 例如正则表达式的结果.有关Mozilla开发页面的详细解释,请访问https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/replace,标题为"将函数指定为参数" (5认同)
  • 我建议使用`\ b\w`而不是`\ w\S*`,因为这会选择每个单词的第一个字母,即使中间的字符是斜线或短划线而不是空格. (5认同)
  • 只是想知道(可能是一个新手问题),但javascript如何知道`function(txt)`参数中的txt是指`str`?是因为你在`str`上调用`replace`所以它可以假设吗? (3认同)
  • 不适用于非英语单词. (3认同)

cap*_*gon 139

你可以使用CSS:

p.capitalize {text-transform:capitalize;}
Run Code Online (Sandbox Code Playgroud)

  • 你不能只使用text-transform:capitalize for cHIcaGO ==> Chicago.你会得到CHIcaGO而不是芝加哥.它只是转换字符串的第一个字母. (19认同)
  • Downvoted是因为问题指定了JavaScript并且您使用不同的技术提供了解决方案. (11认同)
  • 我同意@ RichardSmith-Unna,这个问题指明了如何用Javascript做到这一点.这个回答相当于回答"如何用铅笔和纸分割数字","获取计算器并使用除法功能". (10认同)
  • 由于没有回答使用OP请求的语言而导致downvote (4认同)
  • http://www.w3schools.com/css/pr_text_text-transform.asp (2认同)
  • 谢谢capdragon - 但我需要在客户端更改城市名称并以大写形式保存在数据库中 - 我不认为CSS会允许,是吗? (2认同)
  • css只是样式和渲染,所以你仍然需要确保注入的值是小写的,并在注入数据库之前加上第一个字母的上限 (2认同)
  • 对于所有受到伤害的人来说,解决方案不是 js。这里是。document.getElementById("myP").style.textTransform = "大写"; (2认同)

mae*_*ics 26

function convertCase(str) {
  var lower = String(str).toLowerCase();
  return lower.replace(/(^| )(\w)/g, function(x) {
    return x.toUpperCase();
  });
}
Run Code Online (Sandbox Code Playgroud)

  • ES6快捷方式:`str.toLowerCase().replace(/(^ |)(\ w)/ g,s => s.toUpperCase())` (9认同)
  • 或者,更优雅:`str.toLowerCase().replace(/(^ |)(\ w)/ g,String.toUpperCase)` (3认同)

KJY*_*葉家仁 10

JavaScript函数:

String.prototype.capitalize = function(){
       return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } );
      };
Run Code Online (Sandbox Code Playgroud)

要使用此功能:

capitalizedString = someString.toLowerCase().capitalize();
Run Code Online (Sandbox Code Playgroud)

此外,这将适用于多个单词字符串.

为了确保将转换后的城市名称注入数据库,小写和首字母大写,那么在将其发送到服务器端之前,您需要使用JavaScript.CSS只是样式,但实际数据仍然是预先设置的样式.看一下这个jsfiddle示例,比较警报消息和样式输出.

  • 看起来很好,但不要将它添加到`String.prototype`. (3认同)
  • 它不适用于重音符号,例如“Úrsula” (2认同)