如何将每个单词的第一个字母大写,例如 2 个单词的城市?

IT技术 javascript
2021-02-02 09:28:27

当城市只有一个词时,我的 JS 工作得很好:

  • 芝加哥 ==> 芝加哥

但是当它

  • 圣地亚哥 ==> 圣地亚哥

我如何使它成为圣地亚哥?

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();
}
4个回答

有一个很好的答案在这里

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

或在 ES6 中:

var text = "foo bar loo zoo moo";
text = text.toLowerCase()
    .split(' ')
    .map((s) => s.charAt(0).toUpperCase() + s.substring(1))
    .join(' ');
不错的脚本,但它不适用于变音符号 例如,它会将“anders ångström”转换为“Anders åNgström”。如果您需要脚本来处理此类字符串,请查看stackoverflow.com/questions/15150168/...
2021-03-21 09:28:27
只是想知道(可能是一个新手问题)但是javascript如何知道function(txt)参数中的txt指的是str是不是因为你调用replacestr,因此可以假设?
2021-03-23 09:28:27
它实际上并没有传入str- 它传入了“匹配的子字符串” - 例如正则表达式的结果。developer.mozilla.org/en-US/docs/JavaScript/Reference/ ... 的 Mozilla 开发页面上有一个很好的解释,在标题下Specifying a function as a parameter
2021-03-29 09:28:27
不适用于非英语单词。
2021-03-31 09:28:27
我是否建议使用\b\w而不是\w\S*因为这将选择每个单词的第一个字母,即使中间的字符是斜杠或破折号而不是空格。
2021-04-06 09:28:27

您可以使用 CSS:

p.capitalize {text-transform:capitalize;}

更新(JS解决方案):

基于 Kamal Reddy 的评论:

document.getElementById("myP").style.textTransform = "capitalize";
我同意@RichardSmith-Unna,这个问题指定了如何使用 Javascript 做到这一点。这个答案相当于用“拿一个计算器并使用除法功能”来回答“我如何用铅笔和纸除数”。
2021-03-19 09:28:27
由于未使用 OP 请求的语言回答而投反对票
2021-03-21 09:28:27
你不能只使用 text-transform: capitalize for cHIcaGO ==> Chicago。你会得到芝加哥而不是芝加哥。它只转换字符串的第一个字母。
2021-03-29 09:28:27
投反对票是因为该问题指定了 JavaScript,而您使用不同的技术给出了解决方案。
2021-04-09 09:28:27
function convertCase(str) {
  var lower = String(str).toLowerCase();
  return lower.replace(/(^| )(\w)/g, function(x) {
    return x.toUpperCase();
  });
}
@rakensi 我认为你应该删除你的评论,我看到你已经知道它没有按预期工作,所以没有必要把它留在那里......(无论如何都感谢你的尝试)
2021-03-15 09:28:27
@ClaudioHolanda:...与答案相同:)
2021-03-20 09:28:27
它不适用于口音,例如“Úrsula”
2021-03-29 09:28:27
ES6 快捷方式: str.toLowerCase().replace(/(^| )(\w)/g, s => s.toUpperCase())
2021-04-04 09:28:27
@enver 的评论将不起作用,因为String.toUpperCase它将被绑定到String对象(this将是String,而不是子字符串)
2021-04-08 09:28:27

JavaScript 函数:

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

要使用此功能:

capitalizedString = someString.toLowerCase().capitalize();

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

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

看起来不错,但不要将此添加到String.prototype.
2021-03-27 09:28:27
它不适用于口音,例如“Úrsula”
2021-04-04 09:28:27
if(!String.prototype.toTitleCase) { String.prototype.toTitleCase = function(){ return this.toLowerCase().replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } ); }; } 如果你想添加到 String.prototype 并添加一个 toLowerCase()
2021-04-10 09:28:27