是否有一个简单的方法来转换字符串标题大小写?例如,约翰·史密斯变成了约翰·史密斯。我不是在寻找像John Resig的解决方案那样复杂的东西,只是(希望)一些一两行代码。
当前回答
更简单的高性能版本,具有简单的缓存。
var TITLE_CASE_LOWER_MAP = { 'a': 1, 'an': 1, 'and': 1, 'as': 1, 'at': 1, 'but': 1, 'by': 1, 'en':1, 'with': 1, 'for': 1, 'if': 1, 'in': 1, 'of': 1, 'on': 1, 'the': 1, 'to': 1, 'via': 1 }; // LEAK/CACHE TODO: evaluate using LRU. var TITLE_CASE_CACHE = new Object(); toTitleCase: function (title) { if (!title) return null; var result = TITLE_CASE_CACHE[title]; if (result) { return result; } result = ""; var split = title.toLowerCase().split(" "); for (var i=0; i < split.length; i++) { if (i > 0) { result += " "; } var word = split[i]; if (i == 0 || TITLE_CASE_LOWER_MAP[word] != 1) { word = word.substr(0,1).toUpperCase() + word.substr(1); } result += word; } TITLE_CASE_CACHE[title] = result; return result; },
其他回答
惊讶地看到没有人提到rest参数的使用。下面是一个简单的使用ES6 Rest参数的程序。
让我们看《约翰·史密斯》 str = str。劈(“”)。([firstChar文件夹,...休息)= > firstChar toUpperCase() +休息。加入toLowerCase()(“”)。加入(“”) 控制台日志(str)。
String.prototype.capitalize = function() {
return this.toLowerCase().split(' ').map(capFirst).join(' ');
function capFirst(str) {
return str.length === 0 ? str : str[0].toUpperCase() + str.substr(1);
}
}
用法:
"hello world".capitalize()
ES6内衬
const toTitleCase = string => string.split(' ').map((word) => [word[0].toUpperCase(), ...word.substr(1)].join('')).join(' ');
Greg Dean的解决方案原型方案:
String.prototype.capitalize = function() {
return this.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
如果一个CSS解决方案满足你的需求,你可以应用文本转换CSS样式到你的控件:
text-transform: capitalize;
请注意,这将会改变: hello world到hello world HELLO WORLD到HELLO WORLD(不变) emily-jane o'brien致emily-jane o'brien(不正确) 玛丽亚·冯·特拉普写给玛丽亚·冯·特拉普(不正确)