是否有一个简单的方法来转换字符串标题大小写?例如,约翰·史密斯变成了约翰·史密斯。我不是在寻找像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(“我是一个小/小茶壶。”));

其他回答

与John Resig的解决方案一样功能齐全,但作为一行程序:(基于此github项目)

function toTitleCase(e){var t=/^(a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|vs?\.?|via)$/i;return e.replace(/([^\W_]+[^\s-]*) */g,function(e,n,r,i){return r>0&&r+n.length!==i.length&&n.search(t)>-1&&i.charAt(r-2)!==":"&&i.charAt(r-1).search(/[^\s-]/)<0?e.toLowerCase():n.substr(1).search(/[A-Z]|\../)>-1?e:e.charAt(0).toUpperCase()+e.substr(1)})};

console.log( toTitleCase( "ignores mixed case words like iTunes, and allows AT&A and website.com/address etc..." ) );

吉姆-鲍勃->吉姆-鲍勃

吉姆/鲍勃->吉姆/鲍勃

jim_bob -> jim_bob

不是->不是

学校->学校

麦当劳->麦当劳

function toTitleCase(str) {
  return str.replace(/\p{L}+('\p{L}+)?/gu, function(txt) {
    return txt.charAt(0).toUpperCase() + txt.slice(1)
  })
}

下面是我的函数,它负责处理重音字符(对法语来说很重要!),并且可以打开/关闭对lower异常的处理。希望这能有所帮助。

String.prototype.titlecase = function(lang, withLowers = false) {
    var i, string, lowers, uppers;

    string = this.replace(/([^\s:\-'])([^\s:\-']*)/g, function(txt) {
        return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
    }).replace(/Mc(.)/g, function(match, next) {
        return 'Mc' + next.toUpperCase();
    });

    if (withLowers) {
        if (lang == 'EN') {
            lowers = ['A', 'An', 'The', 'At', 'By', 'For', 'In', 'Of', 'On', 'To', 'Up', 'And', 'As', 'But', 'Or', 'Nor', 'Not'];
        }
        else {
            lowers = ['Un', 'Une', 'Le', 'La', 'Les', 'Du', 'De', 'Des', 'À', 'Au', 'Aux', 'Par', 'Pour', 'Dans', 'Sur', 'Et', 'Comme', 'Mais', 'Ou', 'Où', 'Ne', 'Ni', 'Pas'];
        }
        for (i = 0; i < lowers.length; i++) {
            string = string.replace(new RegExp('\\s' + lowers[i] + '\\s', 'g'), function(txt) {
                return txt.toLowerCase();
            });
        }
    }

    uppers = ['Id', 'R&d'];
    for (i = 0; i < uppers.length; i++) {
        string = string.replace(new RegExp('\\b' + uppers[i] + '\\b', 'g'), uppers[i].toUpperCase());
    }

    return string;
}

只是另一个版本的混合。这也将检查字符串是否。长度为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 >