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

我的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();
}
384579 次浏览

你可以使用CSS:

p.capitalize {text-transform:capitalize;}

更新(JS解决方案):

根据Kamal Reddy的评论:

document.getElementById("myP").style.textTransform = "capitalize";

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

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(' ');

JavaScript函数:

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

使用此函数:

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

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

为了确保转换后的City名称被注入到数据库中,小写且首字母大写,那么在将其发送到服务器端之前需要使用JavaScript。CSS只是简单地设置样式,但实际的数据将保持预样式。看一下这个jsfiddle例子,比较一下警告消息和样式输出。

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