我的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();
}

你可以使用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();
  });
}