是否有一个简单的方法来转换字符串标题大小写?例如,约翰·史密斯变成了约翰·史密斯。我不是在寻找像John Resig的解决方案那样复杂的东西,只是(希望)一些一两行代码。
当前回答
首先,通过空格将字符串转换为数组:
var words = str.split(' ');
然后使用数组。映射以创建包含大写单词的新数组。
var capitalized = words.map(function(word) {
return word.charAt(0).toUpperCase() + word.substring(1, word.length);
});
然后用空格连接新数组:
capitalized.join(" ");
函数titleCase(str) { str = str. tolowercase ();//确保HeLlo在结束时变成HeLlo Var words = str.split(" "); Var大写= words.map(函数(词){ 返回word. charat (0). touppercase () + word. charat。substring(1、word.length); }); 返回大写。加入(" "); } console.log(titleCase(“我是一个小茶壶”));
注意:
这当然有一个缺点。这将只大写每个单词的第一个字母。通过word,这意味着它将每个由空格分隔的字符串视为1个单词。
假设你有:
str = "我是一个小/小茶壶";
这将产生
我是一个小茶壶
与预期相比
我是一个小茶壶
在这种情况下,使用Regex和.replace就可以了:
ES6:
STR .length => ? str [0] .toUpperCase () + str.slice (1) .toLowerCase () :”; STR .replace(/。/g, c => ' \\${c} '); const titleCase =(句子,seps = ' _-/') => { 让wordPattern = new RegExp(“[^ ${逃脱(seps)}] + ', ' g '); 返回的句子。替换(wordPattern,大写); }; console.log(titleCase(“我是一个小/小茶壶。”));
或不含ES6:
函数大写(str) { 返回str.charAt(0).toUpperCase() + str.substring(1, str.length).toLowerCase(); } 函数titleCase(str) { 返回str.replace(/[^\ \/\-\_]+/g,大写); } console.log(titleCase(“我是一个小/小茶壶。”));
其他回答
使用正则表达式的一行程序,获取单词\b[A- za -z]的所有\g开头字符,并应用.toUpperCase()
const textString = "用Javascript将字符串转换为标题大小写。"; const convert = textString。替换(/ \ [a-zA-Z] b / g,(比赛)= > match.toUpperCase ()); console.log(转换)
只是另一个版本的混合。这也将检查字符串是否。长度为0:
String.prototype.toTitleCase = function() {
var str = this;
if(!str.length) {
return "";
}
str = str.split(" ");
for(var i = 0; i < str.length; i++) {
str[i] = str[i].charAt(0).toUpperCase() + (str[i].substr(1).length ? str[i].substr(1) : '');
}
return (str.length ? str.join(" ") : str);
};
试试这个:
function toTitleCase(str) str归来。replace ( - w \ S * / g, 功能(. txt) { 归来txt.charAt(0). toupfaith (+ txt.substr) 的 ); 的 < form > 输入: <br /><textarea" > < / textarea > < br / >输出: <br /><textarea" > < / textarea > < / form >
我们已经在办公室进行了讨论,我们认为试图自动纠正人们输入姓名的方式,以您希望的方式进行,这可能充满了问题。
我们已经提出了几种不同类型的自动大写不成立的情况,这些仅仅是英语名称,每种语言都有自己的复杂性。
每个名字首字母大写的问题:
•像IBM这样的首字母缩写不允许输入,会变成IBM。
•McDonald这个名字会变成McDonald,这是不正确的,同样的东西也是MacDonald。
•像Marie-Tonks这样的双筒名字会变成Marie-Tonks。
O 'Connor这样的名字会变成O 'Connor。
对于其中的大多数,你可以编写自定义规则来处理它,然而,这仍然与以前的缩略语有问题,你会得到一个新的问题:
•添加一个规则来修复Mac的名称,如MacDonald,将打破名称,如Macy,将其变成Macy。
我们提出的唯一解决方案是永远不会不正确的是大写每一个字母,这是一个蛮力的方法,DBS似乎也使用。
因此,如果你想自动化这个过程,没有一个字典,每个名字和单词,以及它应该如何大写,这是不可能的。如果你没有一个规则,涵盖一切,不要使用它,因为它只会惹恼你的用户,并提示那些想要正确输入他们的名字的人去其他地方。
大多数答案似乎忽略了使用单词边界元字符(\b)的可能性。Greg Dean使用它的回答的简短版本:
function toTitleCase(str)
{
return str.replace(/\b\w/g, function (txt) { return txt.toUpperCase(); });
}
也适用于连字符的名字,如吉姆-鲍勃。