是否有一个简单的方法来转换字符串标题大小写?例如,约翰·史密斯变成了约翰·史密斯。我不是在寻找像John Resig的解决方案那样复杂的东西,只是(希望)一些一两行代码。


当前回答

试试这个:

function toTitleCase(str) str归来。replace ( - w \ S * / g, 功能(. txt) { 归来txt.charAt(0). toupfaith (+ txt.substr) 的 ); 的 < form > 输入: <br /><textarea" > < / textarea > < br / >输出: <br /><textarea" > < / textarea > < / form >

其他回答

如果上述解决方案中使用的正则表达式让你感到困惑,试试下面的代码:

function titleCase(str) {
  return str.split(' ').map(function(val){ 
    return val.charAt(0).toUpperCase() + val.substr(1).toLowerCase();
  }).join(' ');
}

我们已经在办公室进行了讨论,我们认为试图自动纠正人们输入姓名的方式,以您希望的方式进行,这可能充满了问题。

我们已经提出了几种不同类型的自动大写不成立的情况,这些仅仅是英语名称,每种语言都有自己的复杂性。

每个名字首字母大写的问题:

•像IBM这样的首字母缩写不允许输入,会变成IBM。

•McDonald这个名字会变成McDonald,这是不正确的,同样的东西也是MacDonald。

•像Marie-Tonks这样的双筒名字会变成Marie-Tonks。

O 'Connor这样的名字会变成O 'Connor。

对于其中的大多数,你可以编写自定义规则来处理它,然而,这仍然与以前的缩略语有问题,你会得到一个新的问题:

•添加一个规则来修复Mac的名称,如MacDonald,将打破名称,如Macy,将其变成Macy。

我们提出的唯一解决方案是永远不会不正确的是大写每一个字母,这是一个蛮力的方法,DBS似乎也使用。

因此,如果你想自动化这个过程,没有一个字典,每个名字和单词,以及它应该如何大写,这是不可能的。如果你没有一个规则,涵盖一切,不要使用它,因为它只会惹恼你的用户,并提示那些想要正确输入他们的名字的人去其他地方。

与其他答案相比,我更喜欢下面的答案。它只匹配每个单词的第一个字母,并将其大写。更简单的代码,更容易阅读和更少的字节。它保留了现有的大写字母,以防止扭曲的首字母缩写。然而,你总是可以首先在你的字符串上调用toLowerCase()。

function title(str) {
  return str.replace(/(^|\s)\S/g, function(t) { return t.toUpperCase() });
}

你可以把这个添加到你的字符串原型,这将允许你'my string'.toTitle()如下所示:

String.prototype.toTitle = function() {
  return this.replace(/(^|\s)\S/g, function(t) { return t.toUpperCase() });
}

例子: String.prototype.toTitle = function() { return this.replace(/(^|\s)\ s /g, function(t) {return t. touppercase ()}); } console.log('全部小写->','全部小写'.toTitle()); console.log('所有大写字母->','所有大写字母'.toTitle()); console.log("I'm a little teapot ->","I'm a little teapot".toTitle());

一种稍微优雅一点的方式,改编了Greg Dean的功能:

String.prototype.toProperCase = function () {
    return this.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
};

这样称呼它:

"pascal".toProperCase();

试试这个,最短的方法:

str.replace(/(^[a-z])|(\s+[a-z])/g, txt => txt.toUpperCase());